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

epo*_*olf 11 c++ keyboard glut

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

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

Tri*_*ian 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']).

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

此外,请注意GLUT是非常古老的东西,并且有更好的选择.

  • 你能说出更多关于这些更好的选择吗? (4认同)