【问题标题】:Using OpenGL /GLUT how would I detect if two keys are held down at the same time?使用 OpenGL / GLUT 如何检测是否同时按住两个键?
【发布时间】:2010-10-26 09:14:31
【问题描述】:

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

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

【问题讨论】:

    标签: c++ keyboard glut


    【解决方案1】:

    尝试以下方法:

    1. 使用glutIgnoreKeyRepeat 仅获取物理keydown/keyup 事件
    2. 使用glutKeyboardFunc 注册回调以监听keydown 事件。
    3. 使用glutKeyboardUpFunc 注册一个回调监听按键事件。
    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 确实是老东西了,还有更好的选择。

    【讨论】:

    • 您能详细介绍这些更好的替代品吗?
    【解决方案2】:

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

    MSDN - GetAsyncKeyState function

    【讨论】:

    • 这仅适用于 Windows。而且 Windows 真的很老了,还有更好的选择。
    猜你喜欢
    • 1970-01-01
    • 2022-01-01
    • 2011-07-09
    • 2012-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-22
    相关资源
    最近更新 更多