在没有SDL或GLUT的情况下检测按键的最佳方法

Best way to detect key presses without SDL or GLUT?

本文关键字:检测 最佳 方法 情况下 SDL GLUT      更新时间:2023-10-16

我最近通过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。食人魔的人有一些文档