Po przydzieleniu zadania i rozpoczęciu pracy z libGDX przez zbudowanie małego klona Węża natknąłem się na problem, który pewnie za chwilę się wstydzę.
Obecnie mam głowę węża (na tym etapie prosty prostokąt) poruszającą się po kanwie gry. Najprostszym sposobem na zbudowanie reszty węża było posiadanie przez szefa biblioteki Java Linked Linked List SnakeElements, która zwiększałaby / zmniejszała rozmiar w zależności od tego, co robi gracz.
Wykazanie, że lista SnakeElements podąża za tobą, nie okazało się jednak trywialne.
Bieżąca funkcja, która to robi, jest następująca i jest wywoływana za każdym razem, gdy głowa aktualizuje swoją pozycję:
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;
}
}
co niestety powoduje takie zachowanie:
Będziemy wdzięczni za wszelkie wskazówki, jak zrobić prawidłowo działający ogon węża :)