完成任务后,通过构建一个小的Snake克隆才开始使用libGDX,我遇到了一个问题,我可能会在一段时间内感到羞愧。
我目前有一个蛇头(在这个阶段是一个简单的矩形)在游戏画布上移动。构造蛇的其余部分最直接的方法是让头部拥有一个SnakeElements的Java Collections LinkedList,它会根据玩家的操作来增加/减小大小。
让这个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;
}
}
不幸的是,导致这种现象:
任何有关如何使蛇尾正常工作的技巧将不胜感激:)