c++ - 将鼠标位置转换为方向和后退

标签 c++ sfml

我想问一下,将鼠标 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/

相关文章:

c++ - 递归函数总是返回假

c++ - c 到 c++,在翻译中丢失

c++ - 如何在linux/c++中控制主音量?

c++ - 从 shared_ptr 获取一个元素

c++ - 接收音频 block 的异步 TCP 服务器出现访问冲突错误

c++11 - 使用代码块 13.12、MinGW 4.8.1 和 SFML 2.1 时缺少一些 C++11 功能

C++ SFML时钟疯狂输出

c++ - 为什么 v8 会在 v8::Isolate::New 中出现段错误?

c++ - 禁止后代类 C++ 中的字段

c++ - 将 SFML 与 GitHub 上的 C++ 项目同步