如何在另一个对象的方向上移动一个对象数组列表-LibGdx

How to move an arrayList of objects in the direction of another object-LibGdx

我正在开发一个 scene2D 游戏,想在蛇对块游戏中模仿蛇的移动。

我有一个头部对象,它沿着用户手指滑动的方向移动。 滑动时,许多对象按顺序添加到头部下方数组 list.When 头部移动,arraylist 对象也随着 it.These 我成功完成的事情一起移动。

现在当它移动时,它显示为单个对象,如下所示:

现在我要

但我想让机芯感觉它们是不同的部分。 每个添加的对象都应该跟随头部的方向。

像这样:

现在我这样设置位置:

for (int i = 0; i <parts.size(); i++){
       circles.get(i).setPosition(head.getX()-head.getRadius(),
            (head.getY()-(head.getRadius()*3))-(60*i));
        }

我尝试在处理触摸控制时手动设置 x 位置:

 private void handleSwipeInput() {
    if (MyInputProcessor.isTouchDown) {
        float movedir = MyInputProcessor.dist > 0 ? 1 : -1;
        float speed = 20;
        float actualSpeed = Math.abs(MyInputProcessor.dist) >= speed ? speed : Math.abs(MyInputProcessor.dist);
        if (movedir > 0) {
            head.setX(head.getX() + actualSpeed);
            for (int i = 0; i <parts.size(); i++){
            circles[i].setX(head.getX()-head.getRadius() + actualSpeed+
     (5*i));

            }
            MyInputProcessor.dist -= actualSpeed;

        } else {
            frame.setX(frame.getX() - actualSpeed);
            for (int i = 0; i <parts.size(); i++){
            circles[i].setX(head.getX()-head.getRadius() - actualSpeed-
           (5*i));

            }
            MyInputProcessor.dist += actualSpeed;
        }
    }
}

但是我的动作很丑陋而且超级生涩。似乎这不是完美的方式。

如果我能得到一些实现这个平滑移动的建议和想法,那将会很有帮助。

头部有一个方向(向量)(Vector2 directionVector),它一直在移动。 头部的每一帧位置都被这个向量改变。 为了获得平滑的方向变化: 头部方向每帧的最大变化应该是增量。

增量越接近零,移动越顺畅。

因此,如果您想改变头部的方向,请逐渐改变,直到获得新的方向。在 update() 方法中通过向方向添加增量并检查是否获得新方向来执行此操作。

同样在 update() 方法中你应该更新数组: 数组中的第一个圆圈获取第一个圆圈的位置 head.second 圆圈获取第一个圆圈的位置,依此类推。

为了创建效果,我使用了 通用补间引擎 并为数组中的每个顺序项递增地赋予了不同的延迟时间。

使用补间,看起来几乎平滑细腻。

Tween.to(circles[i], Accessor.POS_XY,delayValue[i])
                     .target(frame.getX()-frame.getRadius(),circles[i].getY())
                    .start(tweenManager);