¿Cuál es la mejor manera de crear animaciones al hacer el desarrollo de Android?

10

Estoy tratando de crear mi primer juego de Android y actualmente estoy tratando de descubrir (con alguien que hará los dibujos y otro programador) cuál es la mejor manera de crear animación. (Animaciones como un personaje en movimiento, etc.)

Al principio, la diseñadora dijo que podía dibujar objetos / personajes y animarlos con flash para que no tuviera que dibujar cada cuadro de una acción. El otro programador y yo no conocemos demasiado Flash, así que sugerí extraer todas las imágenes de la animación Flash y hacer que aparezcan una tras otra cuando la animación comience.

Dijo que terminaría consumiendo demasiados recursos en la CPU y tiendo a estar de acuerdo, pero realmente no veo cómo se supone que debemos hacer animaciones fluidas sin que sea demasiado difícil para el hardware y, si es posible, no tener el diseñador dibuja cada cuadro en Adobe Illustrator.

¿Puede un desarrollador experimentado de juegos de Android ayudarme a equilibrar esto para que podamos pasar a otras partes del juego ya que no tengo idea de cuál es la mejor manera de crear animaciones?

Adam Smith
fuente

Respuestas:

12

Si está considerando la animación 2D, renderizar un sprite y luego otro no será un problema para el dispositivo (a menos que sus sprites sean enormes).

A continuación se muestra un sprite de animación típico que es el primero que encontré con un poco de búsqueda. Esta es una técnica de uso común y hay muchos sitios web que ofrecen hojas de sprites gratuitas (y de lo contrario, siempre verifique la licencia).

Fuente de la imagen: [aquí] (http://gaminggroundzero.com/?page_id=31)

Imagen + fuente del autor: aquí

El verde se establece como el color transparente de la imagen para que no tenga áreas de color no deseadas. Necesitará conocer las coordenadas de cada animación en la secuencia de animación en la hoja de sprites para poder reproducirlas.

Para Android, podemos echar un vistazo a un motor de juegos de código abierto de Chris Pruett (anteriormente de Google) llamado Replica Island . El código fuente está disponible, y podemos ver su SpriteAnimation.java y SpriteComponent.java .

A SpriteAnimationsimplemente se crea con un recuento de cuadros y una ID única y cada actor en el juego puede tener múltiples animaciones. Se le SpriteAnimationpuede dar un número de AnimationFrames, cada uno con una duración en milisegundos. Esto significa que se pueden intercambiar diferentes animaciones dependiendo de si el personaje se mueve o ataca, etc. (ver más adelante AnimationComponent.playAnimation(int id)).

Cada iteración del bucle del juego, se llama AnimationFrame's' getFrame(float time), y comprueba cuánto tiempo ha pasado desde la última iteración del bucle principal y decide qué fotograma jugar a continuación, luego devuelve el fotograma para enviarlo al sistema de representación. Esto le permite omitir cuadros de animación si la animación va demasiado lenta.

Espero que este ejemplo funcione, y puedes verlo en el juego real en Android Marketplace aquí .

Pie de martin
fuente
¡Muchas gracias por la respuesta bien explicada y detallada! Veré cómo puedo adaptar esto a mi juego. ¡Esto es muy útil!
Adam Smith
@ AdamSmith: Usar hojas de sprites como esa es la mejor manera para animaciones 2D. No importa si su artista crea las animaciones en flash u otro programa, siempre que pueda exportar la animación a imágenes que luego puede empaquetar en una hoja de sprite
bummzack
@bummzack Ese es el tipo de respuesta que esperaba, ¡gracias!
Adam Smith
@AdamSmith también se debe tener en cuenta (para evitar confusiones) que Replica Island en realidad no usa hojas de sprites, usa archivos únicos. La discusión de por qué las hojas de sprites son útiles se puede encontrar aquí y (con más detalle) aquí .
Martin Foot
@Martin Foot, has dado una muy buena explicación. Pero todavía tengo confusión, tengo 10-15 tipos de animación y tengo cuadros de cada uno de ellos con el tamaño de 320x480, que se puede decir una animación de pantalla completa. Entonces, ¿qué me sugiere que debería obtener para SpriteSheet o el archivo fuente de animación individual? Estoy demasiado confundido sobre qué usar. Por favor amablemente sugiérame la mejor manera ... Muchas gracias ...
Scorpion