ExeBlog, desarrollo de videojuegos y más

Blog de Exelweiss dedicado al desarrollo de videojuegos, industria del videojuego, advergaming, juegos online, etc

Animar sprites para juegos de móvil con Flash

7 diciembre 2008

Tal y como comenté en la charla sobre arte en videojuegos para móvil del CDV, cuando empezamos ha desarrollar juegos para móviles java hace cosa de 5 años, tuvimos que dar un nuevo enfoque a la animación de sprites debido a los altos requisitos de optimización de estos dispositivos.

Para animar cualquier sprite de la forma más óptima posible, es necesario:

  • Los fotogramas de la animación (sprites) sin espacios en blanco. Cada sprite tiene el tamaño mínimo posible y normalmente cada uno tiene un tamaño diferente.
  • Identificador o nombre de la animación (por ej., “prota_corre”, “prota_muere”, lo que sea…)
  • Script de animación para definir la secuencia de fotogramas (Por ej., 1, 2, 1, 3, 2…), para no tener que repetir gráficos.
  • Coordenadas de referencia para cada sprite. Esta coordenada dentro del sprite se utiliza para concatenar fotogramas de diferentes tamaños, además de ser utilizada por el programador para colocar el sprite en pantalla.
  • Total independencia del programador. Si se consigue separar código y arte ¡es increíble lo que favorece la productividad!


Algunos fotogramas de la animación “andar” del juego Mr. Bean. Los puntos de referencia (en rojo).

Las dichosas coordenadas de referencia

Hay que tener en cuenta que cada sprite puede tener su coordenada de referencia en un lugar diferente.En este punto nos planteamos cómo disponer de dicha coordenada de forma visual y rápida, sin tener una incomoda y larga lista de coordenadas.

Lo más práctico y rápido en ese momento fue crear una 2ª imagen por cada sprite para indicar la coordenada (o coordenadas) mediante un pixel de color. Esa imagen se procesaría posteriormente para extraer la coordenada.

Esto nos permitía poder realizar montajes más complejos de animaciones dependientes unas de otras.


El fogonazo del fusil (b) y los casquillos (c) depeden automáticamente del fúsil (a) gracias a este sistema de puntos (Storm Gunner).

Y entonces llegó “Flash”…

Pronto este sistema no fue suficiente para crear animaciones más complejas. En ese momento se nos ocurrió usar directamente algún programa de animación. Flash fue la solución. Las ventajas son incalculables…

  • Es el programa de animación más utilizado del mundo. El animador sólo se preocupa de animar. Aumenta el rendimiento y la producción se mejora.
  • La especificación del los ficheros SWF es pública. Es posible extraer la información de coordenadas y sprites del fichero. (gracias Josep!)
  • Permite reutilizar sprites.
  • Permite las transformaciones básicas (rotaciones y volteos)
  • Es posible combinar sprites con imágenes vectoriales.
  • Es posible crear diferentes paquetes de gráficos mediante el uso de capas. Por ejemplo, si necesitamos eliminar cierta animación para un paquete de gráficos en concreto, sólo hay que colocarla en una capa y ocultarla antes de exportar.
  • Todo el proceso es 100% independiente del programador. Se pueden hacer cambios de forma fácil y sencilla. Los cambios se puede probar al instante en el juego.


Sprites finales del protagonista de “Livingstone, Lost Again“.


Animación creada en Flash con sprites

No obstante, sigue siendo necesario disponer de un sencillo script para definir las animaciones y las secuencias de fotogramas:

STANLEY_IDLE = 1,1,1,1,1,2,3,3,3,3,3,2; 	//quieto
STANLEY_WALK = 4-11;
STANLEY_JUMP = 14-20;
STANLEY_CHANGIDLE = 31,31-35,35,35,35-31; 	//colgado del techo quieto
STANLEY_CHANG = 40-47;				//techo moviéndose
STANLEY_BHANGIDLE = 50,50,50-55,55,55,55-50; 	//colgado del borde quieto
STANLEY_BHANG = 58-64,20; 			//colgado del borde salta
STANLEY_SHOT = 23-29; 				//látigo
STANLEY_CROUCH = 99, 102;			//agachado
STANLEY_CRAWL = 100-105,104,103,102,101; 	//arrastrándose
STANLEY_WAKE = 102, 99;				//levantarse
STANLEY_WHANG = 110-116; 			//colgado del látigo
STANLEY_CLIMB = 67,67,67,67-70,70,70,70,69,68; 	//enredadera quieto
STANLEY_CLIMBH = 80-84; 			//enredadera horizontal
STANLEY_CLIMBV = 88-93;				//enredadera vertical
STANLEY_JUMPSHOT = 123-128; 			//látigo saltando
STANLEY_DIE = 132-137;	 	 		//muerte

Hay 8 comentarios.

  • 19:50, 7 diciembre 2008

    EL juego original fue uno de mis preferidos de la época, una pena que mi móvil sea una cacharra y que tampoco use el móvil para jugar. A ver si algun día sacais una version para GP2X o PC :)

  • 19:51, 7 diciembre 2008

    Por cierto, me gustó la explicación de los sprites y el uso que le habéis dado a Flash para generarlo. Hace muchos años hice algo parecido pero usando el formato .CEL de Autodesk Animator

  • 13:08, 11 diciembre 2008

    Use durante un tiempo Autodesk Animator (gran programa), aunque yo era más de Deluxe Paint Animator.

    Incluso estuve cacharreando con algunos amigos el formato ANM de ese programa. :-)

  • 16:33, 12 diciembre 2008

    Enhorabuena por montar el sistema. Yo vi un sistema propietario de animaciones en Gameloft que basicamente venia a ser un entorno Flash especializado en montar animaciones, pero el desarrollo suposo mas de un año al programador.

    Quizas en un futuro podriais poner a la venta el sistema y así se acabaria la pesadilla de muchos programadores para crear buenas animaciones para mobiles de manera optima.

  • 11:11, 10 noviembre 2009

    muy interesante sobre los sprites……….tengo un proyecto para hacer un juego en flash, pero la extensión la tengo en swf y en as2…..como hago para que mi juego sea compatible con dispositvos moviles (sin usa flash lite)?????????

  • 21:45, 14 noviembre 2009

    @santiago
    Tienes que hacer un porting completo de ActionScript a Java MIDP

  • 7. Titin
    23:48, 11 diciembre 2010

    Hola, me darías un ejemplo de ese “sencillo script”?

  • 15:41, 26 enero 2011

    @Titin
    He publicado el script utilizado para el protagonista


  • icono rss RSS