角色运动使用模拟游戏手柄控制在所有方向上具有相同的最大速度

时间:2012-05-26 02:19:33

标签: lua 2d game-physics

我希望以相同的最大恒定速度使用模拟游戏手柄输入向任何方向移动角色。

通常对于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 个答案:

答案 0 :(得分:2)

使用毕达哥拉斯定理找到速度矢量的大小,将你的X和Y速度除以该幅度,然后将每个速度乘以你想要的移动速度。

这是基本的矢量数学。您正在对矢量进行标准化,然后将其乘以标量,以获得具有该标量大小和原始矢量方向的矢量。