Déplacements & Directions dans un jeu 2D
 |
2 Mise en pratique
La mise en pratique : en voilà un sujet qu'il est intéressant  Nous allons voir dans ce chapitre comment changer la direction du sprite et le faire avancer.
2.1 Changer la direction du sprite
Rappellez-vous dans le 1er chapitre, nous avons déclaré et initialisé notre sprite balle avec les valeurs suivantes :
 | balle.posX = 200; balle.posY = 200; balle.dir = 0; |
Notre sprite se trouve donc à la position (200;200) et dans la direction 0 (vers le haut). Pour changer de direction, rien de plus simple, l'action se limite à ajouter 1 ou soustraire 1 à la variable dir, comme ceci :
 | // Rotation droite if ( key & KEY_RIGHT ) balle.dir += 1;
// Rotation gauche else if ( key & KEY_LEFT ) balle.dir -= 1; |
Attention : Il nous faut tout de même vérifier que notre variable dir ne soit pas inférieur à 0 ou supérieur/égal à NBRE_DIRS, voilà donc le code qui effectue ces vérifications, et les corrections si nécessaire :
 | // Vérifie les dépassements de directions // Si la direction est inférieure à zéro, par exemple '-1' nous ajoutons le nombre de directions (NBRE_DIRS) à la direction actuelle, par exemple pour '-1 + 40' cela nous donnera '39' l'objet à fait un tour if ( balle.dir < 0 ) balle.dir += NBRE_DIRS;
// La meme chose qu'avant mais à l'inverse else if ( balle.dir >= NBRE_DIRS ) balle.dir -= NBRE_DIRS; |
C'est fantastique, notre sprite peut désormais changer de direction, WoaW  Enfin bref, voyons maintenant comment le faire avancer dans cette direction !
2.2 Faire avancer le sprite
C'est maintenant que nous allons utiliser nos fameux tableaux de directions : dirX et dirY, voyez plutot :
 | // On avance if ( key & KEY_UP ) { balle.posX += dirX[balle.dir]; balle.posY += dirY[balle.dir]; }
// On recule else if ( key & KEY_DOWN ) { balle.posX -= dirX[balle.dir]; balle.posY -= dirY[balle.dir]; } |
Lorsque l'on appuie sur KEY_UP on additionne à posX la valeur du tableau dirX à la position dir (balle.posX += dirX[balle.dir]). La même chose pour posY (balle.posY += dirY[balle.dir]).
Comme vous pourrez le constater en lançant l'exemple, notre sprite se déplace parfaitement dans la direction voulue.
|
|  |
 |