Могу подсказать более простой вариант. Лучше использовать Math.atan2(), он намного точнее работает. Код будет выглядеть так: let angle = Math.atan2(mouseY - playerY, mouseX - playerX) * 180 / Math.PI. Этот метод круче, потому что автоматом учитывает все квадранты и не надо заморачиватся с доп проверками. У меня в прошлом проекте было такое же геморное вычисление угла, пока не нашол этот способ. Работает на 100%, проверено!
Привет! Могу добавить еще один нюанс к решению. В моих проектах часто использую такой код для расчета угла: let angle = Math.atan2(dy, dx) * 180 / Math.PI + 180. Это позволяет сделать угол всегда положительным и привести его к диапазону 0-360 градусов. Плюс такого подхода - универсальность и простота. Работает заходяще во всех игровых механиках, где нужен точный угол поворота.
Кстати, есть еще один прикольный способ. Можно использовать Math.atan2() с доп условием для поворота на 90 градусов. Например: let angle = (Math.atan2(mouseY - playerY, mouseX - playerX) * 180 / Math.PI + 90) % 360. Это даст более гибкий подход к расчету угла в играх. У меня в одном проекте такой метод заходил идеально.
всё супер просто! можно еще немного упростить код. вот мой вариант: const angle = Math.atan2(dy, dx) * 180 / Math.PI + (dx < 0 ? 180 : 0). у меня в прошлых проектах такой способ заруливал на все 200%. главное - понимать математику за этими вычеслениями. в плюс этому методу то, что он работает практически в любых игровых сценариях, не важно 2д или 3д проект. если че, можно еще доработать под конкретную механику
В моей практике самый адекватный способ - использовать Math.atan2(). Лаконичный код: const angle = Math.atan2(mouseY - playerY, mouseX - playerX) * 180 / Math.PI. Точность 100%, работает для любых игровых механик. Главное преимущество - автоматический учет квадрантов и возможность получения углов в полном диапазоне. В реальных проектах этот метод выручал сотни раз.