Animación Personaje

Para crear la animación de nuestro personaje debemos tener varias imágenes del personaje en distintas posiciones.


Esta entrada es la continuación de "Creando un personaje", por tanto para completar el programa es necesario haber hecho antes el anterior.

La imagen contiene tres imágenes  para cada una de las posibles direcciones. El tamaño del personaje es de 32x32.

Empezando de arriba a abajo las direcciones son: abajo, izquierda, derecha y arriba.  Esto es importante ya que la imagen se va a tratar como una matriz de 4x3.

Mediante una variable llamada direccion se controla la dirección del personaje, y puede tener los siguientes valores:
0 : Abajo
1 : Izquierda
2 : Derecha
3 : Arriba

Y para el control de la animación se crea la variable animacion, que puede tener 3 valores, del cero al 2.

Con estas dos variables se consigue que mediante una única sentencia de pintar seamos capaz de mostrar cualquier imagen del personaje. Quedando de la siguiente forma:

masked_blit(prota, buffer, animacion*32, direccion*32, x, y, 32,32);

Con el comando masked_blit pinta al personaje con el fondo transparente. Pinta de la imagen prota "un trozo" de 32x32, que esta definida por los dos últimos parámetros, sobre la imagen buffer, en la posicion x,y.

"El trozo" esta definido segun: animacion*32, direccion*32. Ambas variables se multiplican por 32 ya que es el tamaño del personaje, y de este modo se selecciona la imagen deseada.


Ejemplos:

Ejemplo 1.
animacion = 0; direccion = 2;
Se ha seleccionado el personaje mirando hacia la derecha.


Ejemplo 2.
animacion = 2; direccion = 0;
Se ha seleccionado el personaje mirando hacia abajo.



Se declaran e inicializan las nuevas variables que vamos a utilizar, así que se añaden junto a las otras variables, quedando de la siguiente forma:

 bool salir;
 int x,y;
 int ax,ay;
 int direccion;
 int animacion;
 int desplazamiento;
 
 // inicializar vbles
 ax = 10;
 ay = 10;
 direccion = 0;
 animacion = 0;
 desplazamiento = 4; 
 x = 10;
 y = 10;

 salir = false;


Se añade a cada condición que controla el teclado, el uso de la variable direccion, asignandole el valor que le corresponde.

          if ( key[KEY_UP] )
          {
               y-=desplazamiento; 
               direccion = 3;              
          }
          if ( key[KEY_DOWN] )
          {
               y+=desplazamiento;
               direccion = 0;
          }
          if ( key[KEY_LEFT] )
          {
               x-=desplazamiento;
               direccion = 1;
          }
          if ( key[KEY_RIGHT] )
          {
               x+=desplazamiento;
               direccion = 2;

Y a continuación para la animacion, para que vaya cambiando su valor pero de forma controlada podemos hacerlo de la siguiente forma:

               animacion++;
               if ( animacion > 2 ) animacion = 0;

De este modo conseguimos que siempre este su valor entre 0 y 2. Recuerda que al principio del programa deberás de declarar las dos variables e inicializarlas a cero.



SHARE
    Blogger Comment

5 comentarios:

  1. Hay 2 o 3 errores que no me dejan compilar...
    1) el masked_blit no me permite tener la matriz
    2) el y+=desplazamiento debería ser animacion y no desplazamiento o da error ya que no tenemos la variable desplazamiento y no creo que se solucione agregándola
    El tercero estaría en donde ponemos dirección

    ResponderEliminar
    Respuestas
    1. Hola,
      1) El masked_blit utiliza una imagen BITMAP, la cual la tratamos como una matriz para obtener la imagen deseada, segun se explica, al tener un tamaño de 32x32 el personaje, se puede considerar que es como tener una matriz de (3,4).
      2) x,y se utilizan para posicionar la imagen con respecto a la pantalla, es por ello que se le suma o resta el desplazamiento. La animacion es una variable que tendrá tres posibles valores (0,1,2) , viene dado en las dos ultimas lineas de código que se muestra en esta pagina.
      3) La variable dirección se utiliza precisamente en el masked_blit.

      Recuerda que debes de declarar e inicializar las nuevas variables.

      Eliminar
  2. Hola buen dia KODAY, estoy aplicando tus tutoriales en un juego de plataformas, se me ha complicado el movimiento de salto del personaje, podrías poner un ejemplo de como podría ser, gracias de antemano y felicidades por tus excelentes cursos

    ResponderEliminar
  3. en que parte tengo que declarar masked_blit???

    ResponderEliminar
    Respuestas
    1. masked_blit es un comando de la librería Allegro. Y este tutorial es la continuación de :
      https://programacion-cpp.blogspot.com/2017/02/creando-un-personaje.html

      Eliminar