我想问一下,将鼠标 X、Y 位置从玩家位置转换为 16 个方向之一的最佳公式是什么。
我在 c++ 中工作,sfml 1.6 所以我很容易得到每个位置,但我不知道如何根据玩家位置的角度或其他东西来转换它们。 (我的数学一向不太好,而且超过 4 个方向 if
语句看起来太复杂了)。
我还想将它发送到服务器,服务器将方向转换回 delta X,Y,这样他就可以做类似的事情:
player.Move(deltaX * speed * GetElapsedTime(), ...Y);
最佳答案
“最简单”的方法是将您的两组坐标(一组用于当前玩家位置,一组用于当前鼠标位置)转换为相对于玩家位置的角度,其中 0 的角度是直线领先于玩家(或北方,取决于您的游戏运作方式)。然后,您的 16 个方向中的每一个都会转换为给定的 22.5 度间隔。
但是,既然你说你数学不好,我想你正在寻找比这更具体的东西。
关于c++ - 将鼠标位置转换为方向和后退,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6572940/