Движение персонажа с одинаковыми максимальными скоростями во всех направлениях с использованием аналогового геймпада
Я хочу перемещать своего персонажа в любом направлении с помощью аналогового входа геймпада с той же максимальной постоянной скоростью.
Обычно для 8 направленного движения я просто умножаю скорость игрока на константу в зависимости от типа направления.
ORTHOGONAL_SPEED = 2
DIAGONAL_SPEED = 1.414
то, что у меня есть, является десятичной из текущих осей от аналогового входа.
joy1_axisDir1 = a number between -1(left) and 1(right)
joy1_axisDir2 = a number between -1(up) and 1(down)
это то, что я теперь должен перемещать персонажа по экрану.
Код Lua:
if joy1_axisDir1 ~= 0 then
player.x = player.x + (player.move_speed * joy1_axisDir1)
end
if joy1_axisDir2 ~= 0 then
player.y = player.y + (player.move_speed * joy1_axisDir2)
end
Это приводит к тому, что диагональное движение заметно быстрее, чем в любом другом направлении.
Как мне учесть направление, чтобы ограничить скорость движения игрока?
1 ответ
Используйте теорему Пифагора, чтобы найти величину вашего вектора скорости, разделите ваши скорости X и Y на эту величину, а затем умножьте каждую на желаемую скорость движения.
Это базовая векторная математика. Вы нормализуете вектор, а затем умножаете его на скаляр, чтобы получить вектор с величиной этого скаляра и направлением исходного вектора.