Здравствуйте, меня немного смущает проблема, которую я не могу решить самостоятельно уже несколько часов.
Я сделал алгоритм для перемещения врагов по точкам, он отлично работает, когда путь идет слева направо.
Однако, когда путь идет справа налево, враг сразу переходит к следующей точке, но только когда точка находится ниже предыдущей, когда следующая точка выше предыдущей, программа работает, как и ожидалось.
Понятия не имею, чем вызвана эта проблема.
Я надеюсь, что кто-то может помочь мне, я был бы благодарен.
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.
Вот картинка, которая будет более четкой.
Показать выпуск