Creando un personaje

Se programará la creación un personaje principal, que se pueda desplazar con las teclas del cursor.

Para facilitar la creación de este ejemplo y poder centrarnos en la programación se utilizará un "Character set"  del RPG Maker.


¿ Que es un Character set del RPG Maker ?


Es una imagen, donde esta dibujado un personaje según las cuatro direcciones: abajo, izquierda, derecha y arriba. Y cada una de ellas tiene tres variantes para hacer una pequeña animación.

En nuestro ejemplo utilizaremos la siguiente imagen.
Haga Click para Descargar

La librería Allegro 4.4 trabaja con imágenes BMP, el color rosa es el que utiliza Allegro para las transparencias.

Programación


#include <allegro.h>

int main() 
{ 
 allegro_init();
 install_keyboard();
 
 set_color_depth(32);
 set_gfx_mode(GFX_AUTODETECT_WINDOWED, 800, 600, 0, 0);
 
 BITMAP *buffer = create_bitmap(800, 600);
 BITMAP *prota  = load_bmp("personaje.bmp",NULL);
 
 bool salir;
 int x,y;
 
 // inicializar vbles
 x = 10;
 y = 10;
 salir = false;

   
 while ( !salir )
 { 
          clear_to_color(buffer, 0xaaaaaa);
          
          masked_blit(prota, buffer, 0,0, x, y, 32,32);
          
          // teclas control usuario
          if ( key[KEY_UP] )
          {
               y--;
          }
          if ( key[KEY_DOWN] )
          {
               y++;
          }
          if ( key[KEY_LEFT] )
          {
               x--;
          }
          if ( key[KEY_RIGHT] )
          {
               x++;
          }                              
                    
       blit(buffer, screen, 0, 0, 0, 0, 800, 600);
       
       rest(10);
       
       // tecla de salida
       if ( key[KEY_ESC] ) salir = true;
              
    }  
  
 destroy_bitmap(prota);
 destroy_bitmap(buffer);
 
 return 0;
}
END_OF_MAIN();

Paso a Paso

#include <allegro.h>
Incluye la libreria Allegro, para poder hacer uso de sus funciones y comandos.

int main(){
Se inicia la función principal

allegro_init();
Inicializa los valores de las variables de la libreria Allegro.

install_keyboard();
Instala el controlador de interrupciones del teclado Allegro. Antes de utilizar cualquier rutina de entrada del teclado debe llamarse a esta función.

set_color_depth(32);
Establece el formato de profundidad de los pixels. Los valores posibles son 8,15,16,24 y 32 bits.

set_gfx_mode(GFX_AUTODETECT_WINDOWED, 800, 600, 0, 0);
Establece la resolución y el tipo de pantalla utilizada. En este caso se indica que será modo ventana, con unas dimensiones de 800x600 pixel.

BITMAP *buffer = create_bitmap(800, 600);
Se crea una imagen bitmap de 800x600 y se guarda en el variable buffer. Esta imagen almacena todo antes de mostrarse por pantalla.

BITMAP *prota  = load_bmp("personaje.bmp",NULL);
Se carga un BMP, llamado personaje.bmp. Y se guarda en la variable prota.

bool salir;
Se crea una variable del tipo booleano llamada salir. Se utiliza para el bucle principal.

int x,y;
Se crea dos variables enteras: x,y. Se utilizan para posicionar la imagen en la pantalla.

// inicializar vbles
x = 10;
y = 10;
salir = false;

Cuando esta precedido de "//" indica que es un comentario.
Las variables son inicializadas a un valor, ya que hasta el momento pueden contener cualquier valor.

while ( !salir )
{
Bucle que se repite mientras se cumpla la condición. En este caso se repite mientras no sea salir.

clear_to_color(buffer, 0xaaaaaa);
Borra el contenido de la imagen buffer, rellenandolo con un color gris (0xaaaaaa).
       
masked_blit(prota, buffer, 0,0, x, y, 32,32);
Pinta la imagen prota sobre la imagen buffer, en la posicion x,y dentro de la imagen buffer. Con un tamaño de la imagen prota de 32x32.
       
// teclas control usuario
if ( key[KEY_UP] )
{
       y--;
}
if ( key[KEY_DOWN] )
{
       y++;
}
if ( key[KEY_LEFT] )
{
       x--;
}
if ( key[KEY_RIGHT] )
{
      x++;
}                            
Este conjunto de condiciones se encarga de controlar cuando se pulsa alguna de las cuatro teclas de dirección y en el caso de ser pulsadas modifica la posición (x,y).
                 
blit(buffer, screen, 0, 0, 0, 0, 800, 600);
Vuelca el contenido de la imagen buffer sobre screen, que es la pantalla, con un tamaño que previamente se a definido, 800x600. Es en este instante en el que se muestra todo por pantalla.
   
rest(10);
Hace una pausa de 10 milisegundos.
   
// tecla de salida
if ( key[KEY_ESC] ) salir = true;
Se define la tecla ESC como tecla para salir, es por ello que se controla si se ha pulsado, en ese caso cambia el valor de la variable salir.
         
}
Fin del bucle principal

destroy_bitmap(prota);
destroy_bitmap(buffer);
Elimina las variables prota y buffer, liberando la memoria ocupada por dichas imagenes.

return 0;
}
END_OF_MAIN();

Devuelve 0 la funcion principal. Y finaliza el programa.


SHARE
    Blogger Comment

11 comentarios:

  1. Están interesantes tus tutoriales pero tengo problemas al descargar los recursos con adfly. No podrás subirlos a otro lugar o mandarlos por correo?

    ResponderEliminar
    Respuestas
    1. Ok, lo tendré en cuenta. Buscaré algún otro lugar para poner los recursos y así facilitar su descarga. Espero no tardar mucho, supongo que en un par de días estarán listos todos los links. Comprueba la sección descargas. Saludos.

      Eliminar
  2. Hola, oye una pregunta.
    La imagen del personaje tiene que ir en un lugar en específico?

    ResponderEliminar
    Respuestas
    1. En la misma carpeta donde se encuentre el ejecutable.

      Eliminar
  3. hola, muchas gracias por el contenido de tu curso. pero tengo una duda. como hago para cargar todas las imagenes bmp que necesito de una carpeta con un ciclo for o while sin necesidad de ir cargando una por una?

    ResponderEliminar
  4. Si tienes problemas con el enlace que está en esta página, prueba con la que aparece en la sección de descargas.

    ResponderEliminar
  5. o también puedes instalarte "universal bypass" que es una extensión que se utiliza para saltarse la publicidad.

    ResponderEliminar
  6. No funciona la transparencia :C

    ResponderEliminar
    Respuestas
    1. Descarga la imagen, y no debes de tener problema. En link lo puedes encontrar en el apartado descargas.

      Eliminar