如何在另一个对象-LibGdx的方向上移动对象的arrayList

时间:2018-01-10 06:39:36

标签: libgdx

我正在制作一个场景2D游戏,想要模仿游戏蛇与积木中蛇的运动。

我有一个头部物体朝着用户手指滑动的方向移动。 在滑动时,在阵列列表的头部下方依次添加了许多对象。当头部移动时,arraylist对象也随之移动。这些事情我成功了。

现在当它移动时,它会像这样显示为单个对象:

enter image description here

现在我想要

但我想让运动感觉它们是不同的部分。 每个添加的对象都应该遵循头部的方向。

这样的事情:

enter image description here

现在我设置这样的职位:

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;
        }
    }
}

但是我得到了一个丑陋且超级生涩的动作。似乎这不是完美的方式。

如果我得到一些实施这一平稳运动的建议和想法,将会有所帮助。

2 个答案:

答案 0 :(得分:0)

头部有一个方向(矢量)(Vector2 directionVector),它继续移动。 头部的每个帧位置都被该向量改变。 为了获得平滑的方向变化: 头部方向上每帧的最大变化应为delta。

更接近于零的delta是更平滑的运动。

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

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

答案 1 :(得分:0)

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

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

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