Xbox360 Аналоговый джойстик SDL

Хорошо, прямо к делу, я работаю над игровым движком на C ++ с использованием SDL и openGL со сценариями lua, и мне нужно получить угол аналогового джойстика, чтобы определить направление двумерного оружия, используя этот код lua

playerLookArrow.rotation = math.atan(logic:controllerAxisForce(3)/-logic:controllerAxisForce(4))

логика: controllerAxisForce (int AXIS) возвращает

SDL_JoystickGetAxis(Joystick, AXIS);

Проблема в том, что мой пистолет будет указывать только налево, а не налево и направо.

0

Решение

Вы должны использовать math.atan2, который делает эту логику за вас (http://www.lua.org/manual/5.1/manual.html#pdf-math.atan2):

playerLookArrow.rotation = math.atan2(
logic:controllerAxisForce(3),
-logic:controllerAxisForce(4))

Обратите внимание, что возвращаемое значение выражено в радианах (180 град. = Радиан Pi), а значение Pi равно 3,141592, а не 3,1 🙂

1

Другие решения

Я действительно глуп, моя проблема заключалась в том, что я могу получить только число от 0 до 3,1 для угла, так что я закончил тем, что сделал

if logic:controllerAxisForce(4) <= 0 then
playerLookArrow.rotation = math.atan(logic:controllerAxisForce(3)/-logic:controllerAxisForce(4))
elseif logic:controllerAxisForce(4) > 0 then
playerLookArrow.rotation = math.atan(logic:controllerAxisForce(3)/-logic:controllerAxisForce(4))+3.1
end

так что если левый аналоговый джойстик направо, он просто добавляет 3,1 или 180 градусов к углу

0