12

使用 OpenGL / GLUT 如何检测是否同时按住两个键,例如“a”和“j”?

(这个程序需要用 OSX GCC、Windows GCC、Windows VS2005 编译,所以请不要依赖操作系统。)

4

2 回答 2

20

尝试以下操作:

  1. 用于glutIgnoreKeyRepeat仅获取物理 keydown/keyup 事件
  2. 用于glutKeyboardFunc注册监听 keydown 事件的回调。
  3. 用于glutKeyboardUpFunc注册监听 keyup 事件的回调。
  4. 创建一个bool keystates[256]数组来存储键盘按键的状态。
  5. 通过 keydown 回调接收事件时,设置keystates[key] = true.
  6. 通过 keyup 回调接收事件时,设置keystates[key] = false.
  7. 在你的运行循环中,测试 if (keystates['a'] || keystates['A']) && (keystates['j'] || keystates['J'])

朝那个方向看。虽然我没有测试过,但它应该可以工作。您可能还需要glutSpecialFuncglutSpecialUpFunc接收“特殊”键的消息。

另外,请注意 GLUT 真的是老东西了,还有更好的选择。

于 2009-05-15T02:05:49.510 回答
0

如果您的意思是更简单且与过剩无关的输入函数,则通过“更好的选择”,然后使用 GetAsyncKeyState 函数...

MSDN - GetAsyncKeyState 函数

于 2013-12-04T19:41:08.213 回答