Dopo un incarico e appena iniziato con libGDX costruendo un piccolo clone di Snake ho riscontrato un problema di cui probabilmente mi vergognerò tra poco.
Al momento ho una testa di serpente (un semplice rettangolo in questa fase) che si muove sulla tela del gioco. Il modo più semplice per costruire il resto del serpente era di avere la testa in possesso di un elenco di raccolte Java di SnakeElements che avrebbe aumentato / ridotto le dimensioni in base alle azioni del giocatore.
Avere questo elenco di SnakeElements seguire la testa, tuttavia, ha dimostrato di non essere banale.
La funzione corrente in questo modo è la seguente e viene chiamata ogni volta che la testa aggiorna la sua posizione:
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;
}
}
che sfortunatamente provoca questo comportamento:
Qualche consiglio su come realizzare una coda di serpente che funzioni correttamente sarebbe molto apprezzato :)