J'ai commencé à programmer un beat them all, et j'ai des problèmes avec le scrolling de la map.
J'ai uniquement besoin de scroller vers la droite. J'ai des tiles 8x8 et un tableau à deux dimensions qui est la "map", chaque case donne le numéro de la tile.
Pour l'instant, ce que je fais, c'est que au début j'affiche des tiles pour remplir l'écran. Ensuite, quand on scroll, on décale tout l'écran d'un pixel, et tous les 8 pixels scrollés, on redessine une colonne de tiles à la fin à droite de l'écran (on charge la suite de la map)
Voici ma fonction qui permet le scroll des 2 buffers (light et dark):
void shiftBackGround(void *buf0, void *buf1)
{
int i, j;
unsigned long int *light_pointeur, *dark_pointeur, light_pix, dark_pix;
light_pointeur = (unsigned long int *)buf0;
dark_pointeur = (unsigned long int *)buf1;
for (i=0;i<120;i++)
{
for(j=0;j<5;j++)
{
light_pix = *light_pointeur;
light_pix <<= 1;
light_pix |= *(light_pointeur+1)>>31;
*light_pointeur = light_pix;
light_pointeur++;
dark_pix = *dark_pointeur;
dark_pix <<= 1;
dark_pix |= *(dark_pointeur+1)>>31;
*dark_pointeur = dark_pix;
dark_pointeur++;
}
}
}
Le problême c'est que c'est pas très beau, les planes ne scrollent pas en même temps. J'ai essayé d'utiliser un double buffer, j'ai regardé et copié d'autres sources, mais rien y fait, ça reste moche quand on scroll.
J'ai packeté le code complet et un binaire si vous voulez juste voir le résultat: http://dd2.freezee.org/dd2.rar
Si quelqu'un trouve ou connait une solution, je prend

ps: le but est de faire un clone du jeu double dragon 2 pour game boy