完成任务后,通过构建一个小的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;
    }
}不幸的是,导致这种现象:

任何有关如何使蛇尾正常工作的技巧将不胜感激:)