使用OpenGL / GLUT如何检测两个键是否同时被按下?

时间:2009-05-15 01:43:07

标签: c++ keyboard glut

使用OpenGL / GLUT我如何检测两个键是否同时按下'a'和'j'?

(此程序需要使用OSX GCC,Windows GCC,Windows VS2005进行编译,因此请不要依赖操作系统。)

2 个答案:

答案 0 :(得分:19)

尝试以下方法:

  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. 在您的运行循环中,测试(keystates['a'] || keystates['A']) && (keystates['j'] || keystates['J'])
  8. 朝这个方向看。虽然我没有测试它,但它应该工作。您可能还需要glutSpecialFuncglutSpecialUpFunc来接收“特殊”密钥的消息。

    另外,请注意,GLUT确实很老,并且有更好的选择。

答案 1 :(得分:0)

通过“更好的替代”,如果你的意思是更简单和无关联的输入函数,那么得到GetAsyncKeyState函数......

MSDN - GetAsyncKeyState function