使用三角法使用鼠标位置计算移动角度

时间:2015-10-07 20:48:12

标签: math lua game-physics trigonometry

我在Lua建立游戏是为了好玩(即使你不认识Lua,你可以帮助我解决这个问题,因为它适用于任何编程语言)。我的问题是我在播放器的表中定义了一个x和y变量:

player = {}
player.x = 10
player.y = 10
player.velocity = 50

我的目标是让玩家移动到屏幕上的鼠标位置。我目前设置为根据鼠标位置增加/减少每次更新的x值和y值。我的代码看起来像这样:

function update(delta_time)  -- delta_time is time in milliseconds since last update
  if mouse.x > screen.width and mouse.y < screen.height then
    player.x = player.x + player.velocity * delta_time
    player.y = player.y + player.velocity * delta_time
end

这只是我要定义的方向的一个例子。我的问题是我不想让巨大的流量控制块检查鼠标x和y位置的象限,并相应地调整玩家的x和y位置。我宁愿进行流畅的360度检测,可以将玩家移向鼠标从中心定位的角度。

我遇到的另一个问题是当我将播放器移动到屏幕右侧时,我只会增加x值,但是当我将播放器移动到屏幕的东北侧时,我会增加x和y值。这意味着玩家的速度将提高2倍,具体取决于移动角度的精确程度。当我向东北角和西北向西时,玩家现在快3倍,因为我将y增加/减少2,x减1.我不知道如何解决这个问题。我对数学和三元组很擅长,但我很难将它应用到我的游戏中。我需要的是有人为我打开灯,我会理解。如果你真的读过这一切,感谢你的时间。

1 个答案:

答案 0 :(得分:4)

计算从玩家位置到鼠标位置的矢量。将此向量标准化(即将其除以其长度),然后乘以player.velocity,然后将其添加到player.x和player.y。这样,速度是恒定的,你可以在各个方向上平稳移动。

-- define the difference vector
vec = {}
vec.x = mouse.x - player.x
vec.y = mouse.y - player.y

-- compute its length, to normalize
vec_len = math.pow(math.pow(vec.x, 2) + math.pow(vec.y, 2), 0.5)

-- normalize
vec.x = vec.x / vec_len
vec.y = vec.y / vec_len

-- move the player
player.x = player.x + vec.x * player.velocity * delta_time
player.y = player.y + vec.y * player.velocity * delta_time