使用 OpenGL /GLUT 如何检测是否同时按住两个键?
题
使用 OpenGL /GLUT 如何检测两个键(例如“a”和“j”)是否同时按下?
(该程序需要使用 OSX GCC、Windows GCC、Windows VS2005 进行编译,因此请不要依赖操作系统。)
解决方案
请尝试以下操作:
- 使用
glutIgnoreKeyRepeat
仅获取物理 keydown/keyup 事件 - 使用
glutKeyboardFunc
注册一个监听 keydown 事件的回调。 - 使用
glutKeyboardUpFunc
注册一个监听 keyup 事件的回调。 - 创建一个
bool keystates[256]
数组来存储键盘按键的状态。 - 通过 keydown 回调接收事件时,设置
keystates[key] = true
. - 通过 keyup 回调接收事件时,设置
keystates[key] = false
. - 在您的运行循环中,测试是否
(keystates['a'] || keystates['A']) && (keystates['j'] || keystates['J'])
.
朝那个方向看。虽然我还没有测试过,但它应该可以工作。您可能还需要 glutSpecialFunc
和 glutSpecialUpFunc
接收“特殊”键的消息。
另外,请注意,GLUT 确实是老东西了,而且还有更好的替代品。
其他提示
这是“更好的选择”,如果你的意思是简单的和过剩,独立的输入功能,然后用GetAsyncKeyState功能得到了...
不隶属于 StackOverflow