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

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

有帮助吗?

解决方案

请尝试以下操作:

  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 确实是老东西了,而且还有更好的替代品。

其他提示

这是“更好的选择”,如果你的意思是简单的和过剩,独立的输入功能,然后用GetAsyncKeyState功能得到了...

MSDN - GetAsyncKeyState功能

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top