07 noviembre 2008

Remake (parcial) de Fruity Frank... 14 - Movimiento animado

Nuestro personaje ya cambia de forma: según si nos movemos hacia la derecha, la izquierda o arriba/abajo, muestra una imagen distinta. Ahora vamos a hacer que cambie ligeramente de forma mientras se mueve en una misma dirección.

Existen varias formas de hacerlo.

Una forma podría ser basarnos en su coordenada X (por ejemplo), de modo que si X es par, se muestre una imagen, y si X es impar, se muestre otra forma distinta. Esto tiene inconvenientes. Por ejemplo, si el incremento con el que se mueve nuestro personaje es 2, siempre se vería la misma imagen.

Otra forma más eficiente podría ser llevar cuenta de qué imagen acabamos de dibujar. Por ejemplo, tener dos imágenes "derecha1" y "derecha2" de nuestro personaje moviéndose a la derecha. Si la última que hemos dibujado es "derecha1", la siguiente que toca es "derecha2" y viceversa. Se podría conseguir así:

if ( TeclaPulsada (TECLA_DER) )
{
if ((xPersonaje < MAXCOLS-1)
&& (mapa1[yPersonaje][xPersonaje+1] != 'M'))
{
xPersonaje ++;
// Alterno entre dos imagenes a la derecha
if (posicion == DERECHA1)
{
personaje = personajeD;
posicion = DERECHA2;
}
else
{
personaje = personajeD2;
posicion = DERECHA1;
}
}
}


En ese ejemplo, DERECHA1 y DERECHA2 podrían ser constantes simbólicas, con valores 1 y 2, respectivamente.

Si tenemos más de dos "fotogramas" de nuestro personaje, podemos hacer que "posición" tome más valores, por ejemplo de 0 a 5 (si tenemos 6 fotogramas en cada dirección), y guardar las imágenes en un array, y entonces haríamos:

    // La posicion va rotando
posicion ++;
if (posicion == DERECHA5)
posicion = DERECHA0;
personaje = imagenPersonaje[posicion];


De la misma forma, podríamos hacer que hubiera animaciones en cada una de las posibles direcciones del movimiento, o en el movimiento de los enemigos.


Para más detalles, puedes ojear todo el proyecto en: code.google.com/p/fruityfrank