jueves, 27 de agosto de 2015

Crear juego RPG en C++ y Allegro 4 (2)

Segunda entrega del curso, continuando con lo anterior en esta entrega vamos a poner animación a nuestro personaje, ya que aunque se puede desplazar por la pantalla la imagen del personaje no cambia.


Como anteriormente vimos, la imagen personaje.bmp contiene la animación y direcciones.

Según vemos en la imagen, empezando de arriba a abajo se tiene las siguientes direcciones:
  1. Abajo
  2. Izquierda
  3. Derecha
  4. Arriba
El tamaño de uno de los personajes si se quisiera cojer solo es de 32x32 pixel.
Para controlar la dirección y la animación se crean dos variables. 
La variable direccion contendrá cuatro posibles valores 0 - 3.
La variable animacion contendrá tres posibles valores 0 - 2.
También se crea una copia de (x,y) llamados (ax,ay) para guardar el valor anterior, y así comprobar si ha cambiado o no.



Programación

Empezamos con los cambios en nuestro programa.
Se declaran e inicializan las nuevas variables


  int ax,ay;
 int direccion;
 int animacion;
 int desplazamiento;

 // inicializar vbles
 ax = 10;
 ay = 10;
 direccion = 0;
 animacion = 0;
desplazamiento = 4; 

Dentro del bucle principal al inicio se debe de dar valor a las variables (ax,ay) con sus respectivos valores.


    ax = x;
   ay = y;


La parte de control del teclado de usuario cambia completamente por lo siguiente:


    // teclas control usuario
          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;
          }  
          if ( ax != x || ay != y )
          {
               // entra si a cambiado alguna de las variables x,y
               animacion++;
               if ( animacion > 2 ) animacion = 0;
          }                     


Y lo ultimo que se debe de cambiar y mas importante es la parte que se encarga de mostrar al personaje.


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


Con este comando estamos indicando de que pinte en buffer una imagen de 32x32, que sera recortada de la imagen prota según las variables animacion y direccion. Y serán situadas en la posición x,y.

Quedando todo el bucle principal de la siguiente manera:


 while ( !salir )
 { 
          clear_to_color(buffer, 0xaaaaaa);
          
          masked_blit(prota, buffer, animacion*32, direccion*32, x, y, 32,32);
          ax = x;
          ay = y;
          // teclas control usuario
          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;
          }  
          if ( ax != x || ay != y )
          {
               // entra si a cambiado alguna de las variables x,y
               animacion++;
               if ( animacion > 2 ) animacion = 0;
          }                            
          
          // limites
          if ( x < 0 ) x = 0;
          if ( x > 800 ) x = 800;
          if ( y < 0 ) y = 0;
          if ( y > 600 ) y = 600;          
          
          
       blit(buffer, screen, 0, 0, 0, 0, 800, 600);
       
       rest(60);
       
       // tecla de salida
       if ( key[KEY_ESC] ) salir = true;
              
    }  
   


Si se fijan, ahora el valor de rest() es mayor debido a que en el pc en el que se ha probado iba muy rápido, por eso se aumentó el valor a 60, en el caso de ir algo lento pueden reducirlo, recuerda que el numero indica el tiempo de espera en milisegundos.

Llegado a este punto, si todo esta correcto tendremos lo mismo que se muestra en el siguiente video.

4 comentarios:

  1. Me podrias explicar la variable desplazamiento ya que no la entiendo ??
    Me funciona perfecto, de hecho le puse una imagen que dibuje yo y me la anima y todo :)
    Muchisimas gracias, excelente tutorial !!

    ResponderEliminar
    Respuestas
    1. La variable desplazamiento tiene el numero de pixels que se desplazará la imagen cada vez que se realice un movimiento. Esta hecho de esta manera para que puedas ajustarlo a tu gusto según el tamaño de la imagen del personaje.

      Eliminar

Related Posts Plugin for WordPress, Blogger...