Habíamos visto anteriormente que en ocasiones, en nuestro juego debemos manejar una gran cantidad de acciones y animaciones para los personajes.
¿Cómo podemos manejar dicha información?
En uno de mis proyectos, los personajes cuentan con varias acciones, animaciones y además utilizan 2 cajas de colisiones (una de vulnerabilidad y otra de ataque).
De forma similar a como vimos en Street Fighter 2, se utilizan variables que registran la siguiente información:
SI: Slot de la secuencia donde inicia la acción.
SR: Slot donde se repite la secuencia de la acción.
SF: Slot de la secuencia donde finaliza la acción.
La información se toma de la siguiente tabla:
Cada slot contiene la siguiente información:
ID Fot.: ID del fotograma de la hoja de sprites.
Int.: intervalos de tiempo de juego que la frame de la animación se va a mostrar antes de avanzar a la siguiente frame.
CXV: coordenada horizontal del centro de la caja de vulnerabilidad.
CYV: coordenada vertical del centro de la caja de vulnerabilidad.
RXV: radio horizontal de la caja de vulnerabilidad.
RYV: radio vertical de la caja de vulnerabilidad.
CXA: coordenada horizontal del centro de la caja de ataque.
CYA: coordenada vertical del centro de la caja de ataque.
RXA: radio horizontal de la caja de ataque.
RYA: radio vertical de la caja de ataque.
La información se toma de la siguiente tabla:
La hoja de sprites es similar a esta:
Ahora, a modo de ejemplo, examinemos cuadro a cuadro la acción de ataque:
La acción de atacar establece el slot inicial en 40. El slot 40 establece que el ID del fotograma de la hoja de sprites que será presentado es el 26. En la figura podemos apreciar el fotograma 26 que da inicio a la animación. Observamos según la tabla que, entre cada fotograma hay 6 intervalos de tiempo antes de pasar al fotograma siguiente, excepto en el último fotograma cuya duración es de 12 intervalos. Además, el último fotograma se repite si no se pasa a otra acción. En ese caso, se debe establecer que al llegar a la conclusión del slot e intervalo, se pase a la acción siguiente (por ej: parado). También, podemos ver que en la imagen se ha marcado con una cruz blanca la coordenada de referencia donde se va a imprimir el sprite, mientras que la cruz roja indica el centro de la caja de ataque.
Veamos más de cerca:
Según la tabla de slots, vemos que en el primer fotograma se nulifica (es decir, que todos los valores son iguales a cero) la caja de vulnerabilidad. Esto se hizo con el propósito de que el balón no golpee accidentalmente el personaje al ejecutar el ataque. También, vemos que el centro de la caja de ataque se establece a 4 pixeles horizontales de las coordenadas de referencia del sprite y a 52 pixeles verticales (rectángulo verde). Por otro lado, vemos el radio horizontal y vertical establecido en 27 y 18 pixeles respectivamente (rectángulo purpura).
Obviamente, este sistema se puede optimizar, por ejemplo, quitando de la tabla de slots la información de las cajas de colisión y estableciendo una tercer tabla que guarde dicha información asociándola a un ID (como vimos en Street Fighter 2).
Ahora, un video con los resultados: