Я пытаюсь повернуть орду зомби, чтобы встретиться с игроком. Я пытался понять это сам в течение некоторого времени, но я не могу понять это.
В настоящее время я использую следующий код для поворота зомби:
public void calculateAngle() {
double theta = 0.0d;
for(Zombie zombie : entities) {
double a = zombie.getX() - player.getX();
double b = zombie.getY() - player.getY();
double c = (int) Math.sqrt(Math.pow(a, 2) + Math.pow(b, 2));
if(zombie.getX() > player.getX() && zombie.getY() > player.getY())
theta = Math.sin(b / c) + 90;
else if(zombie.getX() < player.getX() && zombie.getY() > player.getY())
theta = Math.sin(b / a) - 60;
else if(zombie.getX() > player.getX() && zombie.getY() < player.getY())
theta = Math.sin(a / c);
else
theta = Math.sin(a / c);
zombie.setDegrees(theta);
}
}
Я пытался использовать функцию atan2, которую предлагали люди, но она никогда не работала для меня. Я знаю положение зомби и положение игрока. Как бы я поступил так?
РЕДАКТИРОВАТЬ: Я прочитал комментарии и то, что сказал Томас работает, когда реализовано в моем коде. Обновленный код можно найти ниже:
public void calculateAngle() {
float theta = 0.0f;
for(Zombie zombie : entities) {
float a = zombie.getX() - player.getX() - 40;
float b = zombie.getMidpointY() - 10 - player.getY() - 10;
theta = (float) Math.toDegrees(Math.atan2(b, a)) + 90;
zombie.setDegrees(theta);
}
}
Изменения значений, такие как - 40 и - 10, используются для регулировки положения x и y, чтобы зомби смотрели на игрока правильно. Для поворота самих изображений я использую AffineTransform с методом .rotate (theta, x, y). Я точно не знаю, почему использование метода Math.atan2 () изначально не работало с моим кодом, но теперь работает. Спасибо за помощь.