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:
- Abajo
- Izquierda
- Derecha
- 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.
MUCHAS GRACIAS SIGAN ASI
ResponderEliminarme ha funncionado gracias
ResponderEliminarMe podrias explicar la variable desplazamiento ya que no la entiendo ??
ResponderEliminarMe funciona perfecto, de hecho le puse una imagen que dibuje yo y me la anima y todo :)
Muchisimas gracias, excelente tutorial !!
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