Dev NDS Kramateur

Deplacer un sprite en même temps qu'une map

Voilà un petit tuto, vite fait, qui vous apprendra comment déplacer un sprite en même temps qu'une map :)

 

Télécharger les sources !

1) Charger la map.

Bon, rien de difficile, mais si on le fait pas, qui le fera ??

PA_EasyBgLoad(0, //ecran
                        3, //Numero du BG (0-3)
                        Large); // Nom

 

2) Charger un sprite.

Même commentaire que pour la map :)

PA_LoadSpritePal(0, // ecran
                    0, // Numero de la palette
                    (void*)pacman_Pal);    // Nom de la palette
                   
PA_CreateSprite(0, 0,(void*)pacman_Sprite, OBJ_SIZE_16X16,1, 0, 0, 64);

Mais petit plus, on va animer le sprite !


// On anime le Sprite :D
PA_StartSpriteAnim(0,0,0,7,4);

 

3) Les variables...

Il nous faut quelques variables pour que tout se passe correctement !

// Nous allons bouger le BG, voila les variables
s32 scrollx = 0;
s32 scrolly = 0;
   
// On definit la position initiale du sprite.
int posx=200;
int posy=100;
   
//On definit deux variables pour le déplacement du sprite
int compteur=0;
int sens=0;

 

4) On fait bouger le tout !

On incrémente le scroll si les boutons sont appuyés.

scrollx += (Pad.Held.Right - Pad.Held.Left)*4; // Bouger de 4 pixels à la fois
scrolly += (Pad.Held.Down - Pad.Held.Up)*4; // Idem

 

On bouge le BG :

PA_EasyBgScrollXY(0, // Ecran
                    3, // Numero du BG
                    scrollx, // X scroll
                    scrolly); // Y scroll

et le sprite !

if(posx-scrollx<-16 || posx-scrollx>272 || posy-scrolly<-16 || posy-scrolly>208) PA_SetSpriteXY(0,0,257,192); //Si le sprite est hors de l'écran, on le place en 257 / 192, pour qu'il ne réapparaisse pas.
else PA_SetSpriteXY(0,0,posx-scrollx, posy-scrolly); //Sinon, on affiche le sprite à l'écran.

 

Maintenant, votre sprite se déplace en même temps que la map \o/

Mais ça sera encore mieux si il bougeait sur la map !!! non ?

// On change la position du sprite dans le bon sens
if(sens==0) posx++;
if(sens==1) posy++;
if(sens==2) posx--;
if(sens==3) posy--;
   
// On "regle" le sens de déplacement du sprite
compteur++;
if(compteur==30){
   sens++;
   compteur=0;
   if(sens>3) sens=0;
}
  

 

Et voilà ! un sprite tout beau qui bouge sur une map :)

Topic: Deplacer un sprite en même temps qu'une map

Aucun message nʼ a été trouvé.

Rechercher dans le site

© 2008 Tous droits réservés.