使用三角函数计算使用鼠标位置的移动角度
Using trigonometry to calculate angle of movement using mouse position
为了好玩,我正在 Lua 中构建游戏(即使您不知道 Lua,您也可以帮助我,因为它适用于任何编程语言)。我的问题是我在 table 中为玩家定义了一个 x 和 y 变量:
player = {}
player.x = 10
player.y = 10
player.velocity = 50
我的目标是让玩家向鼠标在屏幕上的位置移动。我目前将其设置为 increase/decrease 每次更新的 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 倍,因为我 increase/decrease y 乘以 2,x 乘以 1。我不知道如何解决这个问题。我真的很擅长数学和三角函数,但我不擅长将它们应用到我的游戏中。我所需要的只是有人为我打开灯,我会理解的。如果您真的阅读了所有这些内容,谢谢您的宝贵时间。
计算从玩家位置到鼠标位置的向量。将这个向量归一化(即除以它的长度),然后乘以 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
为了好玩,我正在 Lua 中构建游戏(即使您不知道 Lua,您也可以帮助我,因为它适用于任何编程语言)。我的问题是我在 table 中为玩家定义了一个 x 和 y 变量:
player = {}
player.x = 10
player.y = 10
player.velocity = 50
我的目标是让玩家向鼠标在屏幕上的位置移动。我目前将其设置为 increase/decrease 每次更新的 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 倍,因为我 increase/decrease y 乘以 2,x 乘以 1。我不知道如何解决这个问题。我真的很擅长数学和三角函数,但我不擅长将它们应用到我的游戏中。我所需要的只是有人为我打开灯,我会理解的。如果您真的阅读了所有这些内容,谢谢您的宝贵时间。
计算从玩家位置到鼠标位置的向量。将这个向量归一化(即除以它的长度),然后乘以 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