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:
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:
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.
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).
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.