Вы можете использовать atan2
, чтобы получить угол между положением мыши и положительной осью X:
#include <cmath>
float player_x = ...;
float player_y = ...;
float mouse_x = ...;
float mouse_y = ...;
float angle = std::atan2(mouse_y - player_y, mouse_x - player_x);
angle
, возвращаемое std::atan2()
- это значение от -M_PI
(исключая) до M_PI
(включительно):
-M_PI Left (-180°)
-0.5 * M_PI Down (-90°)
0 Right (0°)
0.5 * M_PI Up (90°)
M_PI Left (180°)
Вы можете преобразовать это значение в зависимости от того, как вы хотите, чтобы ваше отображение соответствовало «одному из 16 направлений»,то есть, в зависимости от того, какое значение вы хотите присвоить какому дискретному направлению.
Учитывая угол, получить единичный вектор для представления дельты X / Y тоже довольно просто:
float dx = std::cos(angle);
float dy = std::sin(angle);