我正在制作一个场景2D游戏,想要模仿游戏蛇与积木中蛇的运动。
我有一个头部物体朝着用户手指滑动的方向移动。 在滑动时,在阵列列表的头部下方依次添加了许多对象。当头部移动时,arraylist对象也随之移动。这些事情我成功了。
现在当它移动时,它会像这样显示为单个对象:
现在我想要
但我想让运动感觉它们是不同的部分。 每个添加的对象都应该遵循头部的方向。
这样的事情:
现在我设置这样的职位:
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;
}
}
}
但是我得到了一个丑陋且超级生涩的动作。似乎这不是完美的方式。
如果我得到一些实施这一平稳运动的建议和想法,将会有所帮助。
答案 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);