08 octubre 2008

Remake (parcial) de Fruity Frank... 03 - Moviendo el personaje

Un juego real no se queda parado hasta que pulsemos una tecla, sino que debe proseguir continuamente: por ejemplo, aunque nosotros no hagamos nada, los enemigos deberán moverse. Normalmente, incluso en la pantalla de presentación habrá algún tipo de animación.

Por eso, lo habitual será que no usemos "SDLA_esperarTecla" sino "SDLA_teclaPulsada". La forma de emplear esta orden será indicarle entre paréntesis la tecla que queremos comprobar: if ( SDLA_teclaPulsada (TECLA_ABA) ) ..."

Hay varias constantes predefinidas, para representar las teclas más habituales:


  • TECLA_ABA para la flecha hacia abajo del teclado.

  • TECLA_ARR para la flecha hacia arriba.

  • TECLA_DER para la flecha hacia la derecha.

  • TECLA_IZQ para la flecha hacia la izquierda.

  • TECLA_ESC para la tecla de ESCAPE (Esc).

  • TECLA_ESP para la barra espaciadora.

  • ...



Lo único que quedar para que el personaje se mueva es que su posición no sean unas coordenadas fijas, como el (300,100) del ejemplo anterior, sino usar variables (por ejemplo: xPersonaje, yPersonaje) que modifiquemos cuando comprobemos que se pulsa una tecla.

Finalmente, el propio cuerpo del programa ya no deberá ejecutarse sólo una vez, sino repetirse hasta que se pulse cierta tecla (por ejemplo ESC).

La nueva apariencia de nuestro mini-juego será:

#include "SDL_ASI.h"

int main (int argc, char** argv)
{
int xPersonaje=340, yPersonaje=100;

SDLA_inicializar(640,480,24);

SDLA_Imagen* fondoPantalla;
SDLA_Imagen* personaje;

fondoPantalla=SDLA_cargarImagen("fondo.bmp");
personaje=SDLA_cargarImagen("personaje1.bmp");

do {

SDLA_dibujarImagenOculta(fondoPantalla,96,0);
SDLA_dibujarImagenOculta(personaje, xPersonaje, yPersonaje);
SDLA_visualizarOculta();

if ( SDLA_teclaPulsada (TECLA_ABA) )
yPersonaje += 4;
if ( SDLA_teclaPulsada (TECLA_ARR) )
yPersonaje -= 4;
if ( SDLA_teclaPulsada (TECLA_DER) )
xPersonaje += 4;
if ( SDLA_teclaPulsada (TECLA_IZQ) )
xPersonaje -= 4;

} while (! SDLA_teclaPulsada (TECLA_ESC));
return 0;

}


Pero si nos acercamos mucho a los extremos, veremos que el personaje se puede salir de la pantalla de juego... o incluso de la pantalla del ordenador. Ésa será la próxima mejora.

Para ver todo el proyecto en conjunto: code.google.com/p/fruityfrank