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

时间:2011-10-13 19:58:15

标签: c++ input keyboard

我最近使用OpenGL和GLUT通过C ++创建了一个小应用程序。 一切都工作得很好,然后我用帧率等实现了一个合适的游戏循环,这使得很多东西变得更好,但它似乎打破了常规的GLUT键盘检测(这对于游戏键盘输入来说似乎永远不会很好) - 所以现在我正在寻找另一种键盘输入方法。

有人可以建议在应用程序中检测关键输入的任何其他(最好是相对简单的)方法吗?

3 个答案:

答案 0 :(得分:4)

  

所以现在我正在寻找一种合适的键盘输入方法。

不,你正在考虑不再使用GLUT了。

至少在Windows上,您获取输入的能力直接与您的窗口相关联。如果您没有某种窗口,则表示您没有输入(控制台本身就是一个窗口)。更重要的是,如果GLUT拥有您的窗口,那么GLUT将决定如何处理该窗口的输入。

因此,如果您正在使用GLUT,则必须使用GLUT的输入系统。如果GLUT的输入系统不能满足您的需求,那么是时候放弃GLUT以获得更环保的牧场了。毕竟,GLUT用于演示,而不是严肃的应用程序。

所以你需要替换GLUT为你做的所有事情。您可能可以使用GLFW,但这可能不适合您的游戏。因此,SDLSFMLAllegro 5都是可能的。他们有办法生成使用OpenGL的窗口,而且它们都是跨平台的。所有这些都比GLUT具有更有效和灵活的输入系统。

答案 1 :(得分:2)

没有简单的方法。如果您想要从OS输入,则需要跟踪Windows消息,如果您使用GLUT,则不会发生这种情况,因为它会为您创建窗口。另外关于GLUT的另一个坏处是它并没有真正跟踪按下的键,而是输入了字符,因此按下num1和num1 + shift会产生2种不同的东西,对于每个键盘布局,这些都会有所不同。如果您想进行正确的键盘处理,请使用SDL或更好的SFML(google for it - 简单快速的多媒体库)。这些允许您跟踪按键。或者,如果您不想使用任何库,则需要为自己创建和处理窗口,除非您为每个平台制作代码,否则它将无法移植。即使你不想要便携式,使用win32编程也很痛苦,你肯定不想这样做。

GLUT根本不是为游戏而制作的,没有更多内容,我的建议是使用SFML。

<强>更新 如果你真的想搞乱win32(操作系统Windows案例),假设你知道如何创建和处理你的窗口,Windows发送到窗口的消息是WM_KEYDOWN,按下的密钥标识符存储为wParam。在这里,您可以找到所有可能的值virtual keycodes

答案 2 :(得分:1)

OIS。食人魔的人有一些documentation