在没有SDL或GLUT的情况下检测按键的最佳方法
Best way to detect key presses without SDL or GLUT?
我最近通过c++使用OpenGL和GLUT创建了一个小应用程序。一切都工作得很好,然后我实现了一个适当的游戏循环与帧率之类的东西,这使很多事情变得更好,但它似乎也打破了常规的GLUT键盘检测(这似乎从来没有伟大的游戏键盘输入)-所以现在我正在寻找键盘输入在我的应用程序的另一种方法。
有没有人建议其他(最好是相对容易的)方法来检测应用程序中的关键输入?
所以现在我正在寻找一个体面的键盘输入方法在我的应用程序。
不,你正在考虑不再使用GLUT。
至少在Windows上,你获得输入的能力与你的窗口直接相关。如果没有某种类型的窗口,就没有输入(控制台本身就是一个窗口)。更重要的是,如果GLUT拥有您的窗口,那么GLUT将决定如何处理来自该窗口的输入。
因此,如果您正在使用GLUT,则必须使用GLUT的输入系统。如果GLUT的输入系统不能满足您的需求,那么是时候抛弃GLUT了。毕竟,GLUT是用于演示的,而不是用于严肃的应用程序。
所以你需要一个替代品来代替GLUT为你做的所有事情。你也许可以使用GLFW,但这对你的游戏来说可能还不够。因此,SDL、SFML和Allegro 5都是可能的。它们有使用OpenGL生成窗口的方法,而且它们都是跨平台的。它们都有比GLUT更有效和灵活的输入系统。
没有简单的方法。如果你想从操作系统输入,你需要跟踪窗口消息,如果你使用GLUT,这不会发生,因为它为你创建了窗口。GLUT的另一个缺点是,它并不能真正跟踪按下的键,而是跟踪输入的字符,所以按num1和num1+shift会生成2个不同的东西,对于每个键盘布局,这些都是不同的。如果你想做正确的键盘处理,使用SDL或更好的SFML(谷歌为它-简单和快速的多媒体库)。这允许您跟踪按键。或者如果你不想为此使用任何库,你需要自己创建和处理窗口,除非你为每个平台编写代码,否则它是不可移植的。即使你不想移植,用win32编程也是痛苦的,你肯定不想这样做。
GLUT根本不是为游戏而设计的,没有更多的东西,我的建议是使用SFML。
更新:如果你真的想用win32 (OS Windows的情况下),假设你知道如何创建和处理你的窗口,Windows发送给窗口的消息是WM_KEYDOWN和按下的键标识符被存储为wParam。在这里您可以找到所有可能的值虚拟键码
有OIS。食人魔的人有一些文档
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 使用CMake检测支持的C++标准
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- 当套接字连接断开时检测C/C++Unix
- 在c代码之间共享数据的最佳方式
- 检测win32服务创建和删除的最佳方法
- 使用信号检测子进程何时终止的最佳方法是什么?
- 在 c++ 生成器中检测绘制线的窗口坐标的最佳方法
- 使用C 中的单元格 /图块 /网格进行碰撞检测的最佳数据结构
- 检测图像上标记的最佳方法是什么?开放简历
- 检测单击的多个按钮的最佳方法是什么
- C++/C检测文件夹内容何时更改并通过HTTP发送文件的最佳方式
- 最佳实践,在Opencv中检测Mat是否为黑白
- 检测功能键被按下的最佳方法是什么
- 在没有SDL或GLUT的情况下检测按键的最佳方法
- 城市环境中特征检测的最佳算法- OpenCV
- 在c++中检测缓冲区溢出源的最佳方法是什么?
- 用于面部和眼睛检测的最佳opencv版本
- 使用C++检测进程崩溃的最佳方法是什么