Nach einer Aufgabe und dem Einstieg in libGDX durch Erstellen eines kleinen Snake-Klons bin ich auf ein Problem gestoßen, für das ich mich wahrscheinlich in Kürze schämen werde.
Ich habe derzeit einen Schlangenkopf (zu diesem Zeitpunkt ein einfaches Rechteck), der sich auf der Leinwand des Spiels bewegt. Der einfachste Weg, den Rest der Schlange aufzubauen, bestand darin, dass der Kopf eine Java Collections LinkedList of SnakeElements besaß, deren Größe je nach den Aktivitäten des Spielers abnahm.
Es hat sich jedoch als nicht trivial erwiesen, dass diese Liste von SnakeElements dem Kopf folgt.
Die aktuelle Funktion, die dies tut, ist wie folgt und wird jedes Mal aufgerufen, wenn der Kopf seine Position aktualisiert:
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;
}
}
was leider zu diesem Verhalten führt:
Alle Tipps, wie man einen richtig funktionierenden Schlangenschwanz macht, wären sehr dankbar :)