敌人路径问题

时间:2019-04-02 23:26:33

标签: java libgdx

你好,我有点尴尬,因为我有几个小时无法自己解决这个问题。 我制定了一种逐点移动敌人的算法,当路径从左到右移动时,效果很好。 但是,当路径从右向左移动时,敌人会立即跳到下一个点,但是只有当该点在上一个点之下时,当下一个点在上一个点之上时,程序才能按预期工作。

我不知道是什么原因导致了这个问题。 我希望有人能帮助我,我将不胜感激。

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

1 个答案:

答案 0 :(得分:2)

我知道你的问题

path.get(waypoint).y - positon.y <= speed / tolerance *dt

在有问题的情况下将返回true,请尝试使用绝对值

Math.abs(path.get(waypoint).y - positon.y) <= speed / tolerance *dt