Por cierto, lo quise poner antes para Archer y al final se me fue la pinza.
Asi mueves el scroll pixel a pixel.
Código:
#include <genesis.h>
int i;
int s32 coordY = 5;
int s32 coordX = 5;
int numtile = 1;
int ciclo = 0;
const u32 tile[8]=
{
0x00111100, // Línea 1: pixels 1 a 8
0x01144110, // Línea 2
0x11244211, // Línea 3
0x11244211, // Línea 4
0x11222211, // Línea 5
0x11222211, // Línea 6
0x01122110, // Línea 7
0x00111100 // Línea 8: píxels 57 a 64
};
const u32 tile2[8]=
{
0x00111100, // Línea 8: píxels 57 a 64
0x01122110, // Línea 7
0x11222211, // Línea 6
0x11222211, // Línea 5
0x11244211, // Línea 4
0x11244211, // Línea 3
0x01144110, // Línea 2
0x00111100 // Línea 1: pixels 1 a 8
};
int main( )
{
VDP_setScrollingMode (HSCROLL_PLANE, VSCROLL_PLANE); // le decimos que tipo de scroll queremos, tile a tile, linea a linea...
VDP_loadTileData( (const u32 *)tile, 1, 1, 0);
VDP_loadTileData( (const u32 *)tile2, 2, 1, 0);
VDP_setBackgroundColor(0);
while(1)
{
VDP_setBackgroundColor(ciclo);
VDP_setHorizontalScroll(VDP_PLAN_A,ciclo); //movemos el mapa x puntos a la derecha, voy a usar la variable ciclo mismamente
//VDP_setVerticalScroll(VDP_PLAN_A,i%=-50); //por si quieres moverlo tambien en vertical
i--;
if (ciclo>63)
ciclo=0;
ciclo++;
while (coordY<10)
{
while (coordX<10)
{
switch (numtile) //para pintar los dos tiles alternativamente
{
case 1:
VDP_setTileMapXY(VDP_PLAN_A, 1, coordX, coordY);
numtile = 2;
break;
case 2:
VDP_setTileMapXY(VDP_PLAN_A, 2, coordX, coordY);
numtile = 1;
break;
}
coordX++;
VDP_drawText("El texto tambien forma", 2, 1);
VDP_drawText("parte del mapa de tiles.", 2, 2);
}
coordY++;
coordX = 5;
}
coordX=5;
coordY=5;
VDP_waitVSync();
}
return (0);
}
-----Actualizado-----
Evidentemente este codigo es lento porque genera el mapa de tiles para cada frame, que es una animalada, sobre todo teniendo en cuenta que en el caso de un juego, el fondo es fijo, generas el mapa de tiles una sola vez y te olvidas a no ser que necesites cambiar algo de el de manera dinamica.
Marcadores