Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Formato para guardar en disco las animaciones de un personaje 2D

Iniciado por technobroken, 26 de Octubre de 2010, 10:03:26 AM

« anterior - próximo »

technobroken

En el desarrollo de mi juego 2D estoy pensando como almacenar las animaciones de los personajes del juego. Tengo algo ya pensado pero no es lo simple que a mi me gustaría. Por eso pido consejo para ver si se puede hacer mas sencillo.

Cada "Entity" del juego 2D tiene asociado una animación por cada acción que puede hacer y cada animación tiene una serie de "Frames".
Por un lado me surge la duda de si cada animacion debe estar en una imagen o todas las animaciones dentro de una imagen. Sucede que cada animacion tiene un numero distinto de frames y por tanto si se ponen todas las animaciones dentro de una imagen pueden quedar huecos. Claro estos huecos se pueden evitar si a cada frame le asociamos unas coordenadas dentro de la imagen. Ésta es una de mis dudas, si merece la pena dejar huecos a favor de tener menos informacion a la hora de guardar la animacion o si no. Otra alternativa es poner cada animacion en una imagen.

Por otro lado sucede que dentro de la animacion hay frames que se repiten. Puedo o bien dejar la secuencia completa con los frames repetidos dentro de la imagen o bien, en la imagen solo dejar los frames no repetidos y luego almacenar en disco la secuencia de frames de la animacion. Mas sencillo es dejar toda la secuencia completa de frames en la imagen, pero tb ocupa mas espacio en disco.

Y por último ¿Hay algun programa que hayais usado que facilite esta tarea? Es decir, con el que pueda editar estas animaciones y se guarden en un formato conocido para luego poder leerlas en el juego.

¿Qúe sugerencias me podeis dar? Gracias!

WaaghMan

Nunca he usado ninguno, pero a la fuerza han de existir programas para ello, aunque tendrás que adaptarte al formato en el que graben.

Sobre lo de usar una imagen o varias, si se va a usar aceleración hardware mucho mejor si todo está en la misma textura, es más rápido y tardará menos en cargar.

La técnica suele ser muy parecida a la que se usa para renderizar textos, ya que tienen la misma característica de ser muchas imágenes diferentes y pequeñas individualmente.
Milkstone Studios - Autores de Avatar Ninja!, Little Racers, MotorHEAT y Wool en Xbox Live Indie Games

[EX3]

En mi ultimo desarrollo, por diversas razones de como programe el motor grafico, tenia separado por un lado los tiles que definia en una textura (archivo con extension .tex) y por otro las secuencias de animacion con su informacion y referencia al archivo de definicion de tiles (archivo con extension .ani). Estos archivos debian tener el mismo nombre que la textura a la que estaban asociados (ej: player.png -> player.tex -> player.ani) El motor tenia una clase Sprite que al cargar una textura buscaba el archivo de tiles y si lo hubiera, el de animaciones, y las cargaba en memoria, todo en una sola llamada.

El formato de archivo de animaciones, lo que definia, en formato texto (si no hubiera sido por el lenguaje usado hubiera usado XML), cada linea era una secuencia de animacion que definia su clave o id de la animacion (una clave de texto), un valor unico de lapso entre frames (el tiempo que tarda en actualizar la animacion), y la lista de frames, que son los id's o claves de los tiles de la textura asociada.

[tiles]
frame00;0,0,32,64
frame01;32,0,32,64
frame02;64,0,32,64
...

[animaciones]
run;30;frame00,frame01,frame02
jump;24;frame03,frame04,frame05,frame04
...

Sobre programa, dado que me estuve desarrollando mi propio motor a medida opte por hacerme tambien la herramienta a medida, un editor donde cargaba la textura, todo mediante las funciones del motor del juego, donde definia y editaba los tiles, sus puntos de control (si has programado en Div sabras de que hablo), y de manera integrada, tambien las animaciones mediante un editor integrado a modo de modulo en el programa, todo en base a llamadas al propio motor. No conozco herramientas para definir animaciones 2D salvo algun desarrollo de terceros para plataformas concretas (hay por ejemplo una para XNA que tengo echarla un vistazo) y generalmente las pocas que he visto tienen un problema al menos para mi, trabajan con tamaños fijos para todos los frames de la animacion, mi herramienta por ejemplo permitia definir cada frame del tamaño que quisieras.

Esto al final es buscar la via mas comoda y sencilla para tu objetivo por que a diferencia del 3D en 2D no existe un formato estandar para definir animaciones. Generalmente, con que definas algo parecido a lo de arriba: clave, delay y los frames (da igual si repites frames o no) no te deberia hacer falta mas editor que el block de notas.

Salu2...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

wintermute83

Ex3, al hilo de lo dicho, me interesa tu programa para definir animaciones y puntos de control!

[EX3]

Cita de: wintermute83 en 26 de Octubre de 2010, 11:03:01 AM
Ex3, al hilo de lo dicho, me interesa tu programa para definir animaciones y puntos de control!
Genial, si logras hacer que Visual Basic 6.0 compile correctamente la DLL ActiveX de mi motor grafico ya tienes tienes editor de tiles y animaciones, si no, suerte para portar el codigo a otro lenguaje y motor por que yo tire la toalla definitivamente en la Campus Party xDDDDD



Salu2... :)

José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

wintermute83

Oye eso pinta genial.
Hombre Ex3, estoy muy verde en este mundillo.. Te refieres a pegarte con el ide de visual basic para que reconozca una librería? si es así suena factible, y seguro que tardo infinitamente menos que desarrollando un editor como el tuyo. Lo de portarlo a otro lenguaje  :-\ ..

De momento llevo el juego muy despacito, y pensaba prescindir de puntos de control, pero si llegado el momento hay necesidad me acordaré de este post XDD

[EX3]

Cita de: wintermute83 en 27 de Octubre de 2010, 01:20:59 PM
Hombre Ex3, estoy muy verde en este mundillo.. Te refieres a pegarte con el ide de visual basic para que reconozca una librería? si es así suena factible, y seguro que tardo infinitamente menos que desarrollando un editor como el tuyo. Lo de portarlo a otro lenguaje  :-\ ..
Resumidamente, mi motor grafico no compila a binario por un error interno e indocumentado del Visual Basic 6.0 (maravillas de la era ActiveX), solo funciona a nivel de proyecto (osea, que solo ejecuta desde el editor de Visual Basic), el editor trabaja contra el motor para realizar todas las acciones de edicion. Obviamente, es un curro brutal si tuvieras que coger el codigo, traducirlo a C++ por ejemplo, y traducir las llamadas del motor a codigo propio o a otra libreria o motor. Vamos, que mas de la mitad del editor te tocaria reprogramarlo desde 0 y como es logico no te merece la pena ni a mi si quiera :P

Cita de: wintermute83 en 27 de Octubre de 2010, 01:20:59 PM
De momento llevo el juego muy despacito, y pensaba prescindir de puntos de control, pero si llegado el momento hay necesidad me acordaré de este post XDD
Yo lo de los puntos de control, no se como no lo implementan de base en otros sistemas como XNA o librerias similares por que me parece el mejor invento del mundo, sobre todo si tienes que hacer como yo, armarte un personaje por piezas y quieres tener localizados ciertas coordenadas como desde donde dispara el arma o cual es el centro de rotacion de los sprites de los brazos. Se puede hacer un sin fin de cosas y ayuda mucho (sobre todo te evitas muchos recalculos a mano ya que yo lo tenia programado como transformaciones en mi clase Sprite a la hora de hacer translaciones, escalas y rotaciones).

Salu2...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.