Suite à une mission et tout juste commencer avec libGDX en construisant un petit clone de Snake, j'ai rencontré un problème pour lequel j'aurai probablement honte dans un petit moment.
J'ai actuellement une tête de serpent (un simple rectangle à ce stade) se déplaçant sur la toile du jeu. La façon la plus simple de construire le reste du serpent était de faire en sorte que la tête possède une Java Linked Linked List of SnakeElements dont la taille augmenterait / diminuerait en fonction de ce que fait le joueur.
Avoir cette liste de SnakeElements suivre la tête cependant s'est avéré non trivial.
La fonction actuelle faisant cela est la suivante et est appelée chaque fois que la tête met à jour sa position:
private void moveTail (float x, float y, int direction) {
float tmpx, tmpy;
int tmpdirection;
int offset_x, offset_y;
for (SnakeSegment snse : tail) {
offset_x = 0;
offset_y = 0;
tmpx = snse.getX();
tmpy = snse.getY();
tmpdirection = snse.getDirection();
switch(direction) {
case 0:
offset_x = 0;
offset_y = -(2 + snse.width);
break;
case 1:
offset_x = -(2 + snse.width);
offset_y = 0;
break;
case 2:
offset_x = 0;
offset_y = (2 + snse.width);
break;
case 3:
offset_x = (2 + snse.width);
offset_y = 0;
break;
default:
System.out.println("wrong direction");
}
snse.setX(x + offset_x);
snse.setY(y + offset_y);
snse.setDirection(direction);
x = tmpx;
y = tmpy;
direction = tmpdirection;
}
}
ce qui se traduit malheureusement par ce comportement:
Tous les conseils sur la façon de faire une queue de serpent qui fonctionne correctement seraient très appréciés :)
La façon dont je le vois est comme un système de type "Caterpillar", où chaque partie du serpent suit la partie qui la précède.
En d'autres termes, chaque partie du serpent serait un objet avec position (x, y) , une référence à la partie devant elle qu'il utiliserait pour se déplacer et une fonction pour traiter la position de la partie devant lui et déplacer en conséquence. Le serpent principal (la tête) devrait avoir des références pour chaque partie du serpent, et appellerait la fonction responsable de faire suivre la pièce à son prédécesseur, étant la tête le prédécesseur de la première partie.
J'espère que cela aide!
la source