Проблема с врагами - PullRequest
       22

Проблема с врагами

1 голос
/ 03 апреля 2019

Здравствуйте, меня немного смущает проблема, которую я не могу решить самостоятельно уже несколько часов. Я сделал алгоритм для перемещения врагов по точкам, он отлично работает, когда путь идет слева направо. Однако, когда путь идет справа налево, враг сразу переходит к следующей точке, но только когда точка находится ниже предыдущей, когда следующая точка выше предыдущей, программа работает, как и ожидалось.

Понятия не имею, чем вызвана эта проблема. Я надеюсь, что кто-то может помочь мне, я был бы благодарен.

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.

Вот картинка, которая будет более четкой. Показать выпуск

1 Ответ

2 голосов
/ 03 апреля 2019

Я вижу вашу проблему

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

вернет истину в проблемном случае, попробуйте использовать абсолюты

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