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 что делает невозможным их разделение, и вам нужны разные результаты в каждом случае.

Другие вопросы по тегам