敌人路径问题
Enemies Path Issue
你好,我有几个小时都无法自己解决的问题,这让我有点尴尬。
我做了一个算法来逐点移动敌人,当路径从左到右时它工作正常。
然而,当路径从右到左时,敌人会立即跳到下一个点,但只有当该点在前一个点下方时,当下一个点在前一个点上方时,程序才能正常运行。
我不知道是什么导致了这个问题。
我希望有人能帮助我,我将不胜感激。
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;
}
公差是一个等于 3 的整数。
这里放一张图更清楚。
Show Issue
我看到你的问题了
path.get(waypoint).y - positon.y <= speed / tolerance *dt
在有问题的情况下 return 为真,请尝试使用绝对值
Math.abs(path.get(waypoint).y - positon.y) <= speed / tolerance *dt
你好,我有几个小时都无法自己解决的问题,这让我有点尴尬。 我做了一个算法来逐点移动敌人,当路径从左到右时它工作正常。 然而,当路径从右到左时,敌人会立即跳到下一个点,但只有当该点在前一个点下方时,当下一个点在前一个点上方时,程序才能正常运行。
我不知道是什么导致了这个问题。 我希望有人能帮助我,我将不胜感激。
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;
}
公差是一个等于 3 的整数。
这里放一张图更清楚。 Show Issue
我看到你的问题了
path.get(waypoint).y - positon.y <= speed / tolerance *dt
在有问题的情况下 return 为真,请尝试使用绝对值
Math.abs(path.get(waypoint).y - positon.y) <= speed / tolerance *dt