如何在另一个对象的方向上移动一个对象数组列表-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);
我正在开发一个 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);