LWJGL: вращать квад в зависимости от положения мыши
Я пытаюсь, чтобы персонаж держал пистолет, но я хочу, чтобы пистолет двигался мышью. Например, если мышь поднята, пистолет направлен вверх. Если мышь находится слева, пистолет указывает влево. Я использовал положение игрока и положение мыши, чтобы построить прямоугольный треугольник, а затем использовал обратный синус, чтобы найти угол возвышения. Тем не менее, это работает только для 90 градусов движения. Любые идеи о том, как еще я мог бы приблизиться к этому, чтобы я получил полные 360 градусов вращения?
Код для расчета угла:
private double calcAngle()
{
double mouseX,mouseY,subX,subY,playerToMouse,mouseToSub,angle;
mouseX = Mouse.getX();
mouseY = Mouse.getY();
subX = mouseX;
subY = y;
playerToMouse = Math.sqrt(Math.pow(x-mouseX,2)+Math.pow(y-mouseY,2));
mouseToSub = Math.sqrt(Math.pow(mouseX-subX,2)+Math.pow(mouseY-subY,2));
angle = Math.toDegrees(Math.asin(mouseToSub/playerToMouse));
return angle;
}
Текущее вращение (розовый представляет игрока; зеленый представляет пистолет; желтый представляет мышь):
1 ответ
Ты можешь использовать Math.atan2(mouseY-gunY, mouseX-gunX)
который вернет угол между пи и -пи радианами, или 180 и -180 градусов после преобразования его в градусы. Проблема с использованием asin
в том, что 1/1
равно -1/-1
что делает невозможным их разделение, и вам нужны разные результаты в каждом случае.