Після виконання завдання та розпочаття роботи з libGDX , побудувавши невеликий клон Змії, я натрапив на проблему, за яку я, мабуть, соромлюся через деякий час.
У мене зараз голова змії (простий прямокутник на цьому етапі), що рухається навколо полотна гри. Найбільш прямим способом побудови решти змії було створення голови у власних Java Collection Collection LinkedList of SnakeElements, яка б збільшувала / зменшувала розміри відповідно до того, що робить гравець.
Якщо цей список SnakeElements слідкуйте за головою, проте, виявилося, це не банально.
Поточна функція, яка виконує це, полягає в наступному і викликається щоразу, коли голова оновлює своє положення:
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;
}
}
що, на жаль, призводить до такої поведінки:
Будемо дуже вдячні будь-які поради, як зробити правильно працюючий зміїний хвіст :)