你好,我有点尴尬,因为我有几个小时无法自己解决这个问题。 我制定了一种逐点移动敌人的算法,当路径从左到右移动时,效果很好。 但是,当路径从右向左移动时,敌人会立即跳到下一个点,但是只有当该点在上一个点之下时,当下一个点在上一个点之上时,程序才能按预期工作。
我不知道是什么原因导致了这个问题。 我希望有人能帮助我,我将不胜感激。
public void update (float dt) {
if (play) {
angle = (float)Math.atan2(path.get(waypoint).y - positon.y, path.get(waypoint).x - positon.x);
velocity.set((float)Math.cos(angle) * speed, (float)Math.sin(angle) * speed);
positon.set(positon.x + velocity.x * dt, positon.y + velocity.y * dt);
if(isWaypointReached(dt)) {
positon.set(path.get(waypoint).x, path.get(waypoint).y);
if(waypoint + 1 >= path.size) {
positon.set(path.first().x, path.first().y);
waypoint = 1;
}
else
waypoint++;
}
}
}
我已经尝试过反转X轴,但没有成功。
path是一个Vector2数组,其中包含每个点的位置。
下一个点的航路点。
private boolean isWaypointReached(float dt) {
if (path.get(waypoint).x - positon.x <= speed / tolerance * dt && path.get(waypoint).y - positon.y <= speed / tolerance *dt)
return true;
}
Tolérance是一个等于3的整数。
这里的图片更加清晰。 Show Issue
答案 0 :(得分:2)
我知道你的问题
path.get(waypoint).y - positon.y <= speed / tolerance *dt
在有问题的情况下将返回true,请尝试使用绝对值
Math.abs(path.get(waypoint).y - positon.y) <= speed / tolerance *dt