He estado buscando en Google cómo los juegos como Choque de clanes representan a sus tropas, y parece que están renderizando previamente modelos 3D en hojas de sprites 2D antes del tiempo de ejecución, y renderizando esas imágenes 2D en tiempo de ejecución. Sin embargo, las tropas en Choque de clanes pueden enfrentar cualquier dirección.
En mi juego similar, si creara una imagen para cada orientación (0-360 grados) para cada tipo de tropa (hay 18 tipos) en cada cuadro en su animación, tendrían que producir una cantidad masiva de imágenes. No puedo imaginar que esto es lo que otros desarrolladores están haciendo, entonces, ¿cómo puedo lograr esto?
Respuestas:
Por lo general, hay menos de 360 direcciones. El caso común es 8 o 16. Las animaciones también son bastante cortas.
La automatización es tu amiga. Escriba un script Blender / 3DMax / etc para cargar un modelo de la lista, renderícelo en cada cuadro y dirección necesarios a una imagen. Etiquete las imágenes según el contenido y abordelas desde el juego.
Empaque todo en atlas de texturas (también conocido como hojas de sprites) para un acceso más rápido.
Al final, terminarás con varios miles de sprites, perfectamente empaquetados en solo una docena de atlas. No es un gran problema;)
No pude encontrar una imagen de CoC, pero aquí está Diablo II, que utilizó el mismo enfoque para las animaciones de los personajes. Por ejemplo, ataque cuerpo a cuerpo de Amazon:
fuente
También tenga en cuenta la baja resolución de estas imágenes. Hay un par de cosas más que puedes hacer para ahorrar espacio, aunque no sé cuáles de estas son utilizadas por Choque de clanes:
Puede sesgar el posicionamiento para que las tropas se enfrenten a las direcciones estándar (N, E, S, W, NE, SE, SW, NW) la mayoría de las veces, luego optimice solo para las direcciones estándar.
Puede hacer un enfoque combinado, donde renderiza previamente solo algunas direcciones. Durante el marco, puede representar las tropas que no coinciden con una imagen existente, o usar la imagen más cercana si se le acaba el tiempo.
Use simetrías izquierda / derecha siempre que sea posible para reducir la cantidad de fotogramas almacenados a la mitad.
Puede priorizar ciertas animaciones como caminar y descansar, almacenando más direcciones y marcos para estas. Luego, priorice otras animaciones, como el balanceo de una espada, donde almacena menos direcciones y marcos (sugiero mantener más direcciones para el primer y último marco del swing).
Puede simular las direcciones restantes utilizando la imagen más cercana y luego estirándola.
En general, podríamos estar hablando de 18 unidades, hasta 8 direcciones, tal vez 2 segundos de animaciones a 20 cuadros por segundo, un promedio de 64x64 píxeles y aproximadamente 2 bytes por píxel. Eso es 18x2x20x64x64x2 = 50 MB. También pueden escalar el número de direcciones, la resolución y el número de fotogramas en función de las capacidades del dispositivo y el número de unidades utilizadas en el mapa.
fuente
Además de la respuesta @Kromster, tenga en cuenta que las imágenes a menudo se comprimen significativamente, y en las imágenes grandes de "atlas" donde hay muchos elementos repetidos (por ejemplo, fondo en blanco) la compresión es significativa. Entonces, el "tamaño" final de las imágenes no es simplemente una multiplicación directa del tamaño de la imagen individual.
fuente
Para un ejemplo clásico, le sugiero que descargue el Doom original, que utilizaba sprites 2D en un entorno pseudo-3D. Los sprites tenían 8 direcciones enfrentadas (en relación con el punto de vista del jugador), y de memoria unos 8 tamaños diferentes a medida que se acercaban. Esto era muy visible, pero era lo suficientemente aceptable para el juego. En Clash u otros juegos de visualización isométrica no hay necesidad de considerar la distancia, por supuesto.
fuente