25 septiembre 2005

Sprites. Un ejemplo práctico

En la última entrega vimos un poco por encima los recursos que tiene la Gameboy Advance para manejar sprites. No obstante, la mejor forma de aprender suele ser practicando, así que vamos a poner en marcha un pequeño ejemplo en el que se dé uso a los conceptos vistos.

Vamos a hacer un programa que sea capaz de mover por pantalla un par de sprites. Los que he usado en mi ejemplo son Head y Heels, los dos protagonistas de un clásico de los 8 bits programado por Jon Ritman: Head Over Heels, y versionados por todo un crack del dibujo que es Matriax. Son dos gráficos de 32x32 pixels. Al importarlos a nuestro código sólo hemos tenido que tener la precaución de hacer que compartan la misma paleta de 256 colores.

Mediante la cruceta moveremos a uno de ellos. Si mantenemos pulsado el botón R moveremos al otro, mientras que si mantenemos pulsado L moveremos a ambos. Por último, el botón START intercambia la prioridad de los sprites, esto es, cuál se debe pintar encima del otro.

Por último, en la parte inferior mostraremos las coordenadas de Heels y Head.

El programa es muy sencillo. No obstante, vamos a comentarlo por partes.

Para gestionar los sprites podemos usar una estructura como la siguiente:

typedef struct
{
int x,y;
OAMEntry* oam;
int gfxID;
}Sprite;

Guardamos las coordenadas x e y, la entrada en la tabla OAM y un identificador del gráfico.

En la función main() simplemente inicializamos ambos sprites y, a continuación, definimos el modo de vídeo, activamos el fondo, los sprites e indicamos que el mapeado de los mismos lo haremos en modo 1D.

Borramos el fondo, activamos los sprites y entramos en un bucle sin fin:
  • Leemos los botones
  • Según las pulsaciones, moveremos los sprites convenientemente
  • Esperamos al retrazado vertical y, justo después, copiamos la información desde el buffer a la OAM (evitando así parpadeos).
El resto de funciones están comentadas en el código fuente. No obstante, si tenéis alguna duda no dudéis en consultarme.

Recordad que si vuestra instalación del compilador difiere de la mía deberéis editar el Makefile para que la compilación se efectúe correctamente.


Código fuente.
ROM.

3 Comentarios:

Anonymous Gabi dijo...

Soy novato en esto de programar la gba pero tengo una duda...A ver, una vez que tengamos el código, ¿ como lo pasamos a una ROM para probarlo en nuestra gba, en vez de probarlo en un emulador ?

Un saludo

4:05 p. m.  
Blogger Toni dijo...

muy interesante tu blog, hay mucha información útil.

Yo soy spriter, iniciado. si te interesa me pegas un toque.

Un saludo!

8:01 p. m.  
Anonymous Anónimo dijo...

hola yo estoy desesperado y quiero saber mas o menos paso a paso como compilo en un rom codigo C que anteriormente era un archivo de sonido, ahora es un archivo C con la info del waveform, pero como lo agrego a un rom y que suene el sonido?

11:29 p. m.  

Publicar un comentario

<< Home