【问题标题】:GLUT doesn't detect properly more then 2 keys pressed?GLUT 不能正确检测超过 2 个按键?
【发布时间】:2011-07-23 10:06:11
【问题描述】:

我正在尝试使用(免费)GLUT 制作一个小游戏。我知道它很旧并且有更好的选择,但目前我更喜欢坚持使用它并尽可能多地使用它。我用 C 编程。

我目前正在尝试让 GLUT 正确检测我按下的所有键。 我使用 glutKeyboardFunc、glutKeyboardUpFunc、glutSpecialFunc 和 glutSpecialUpFunc 来检测按下的键,并将它们的状态存储在我创建的一个短数组中(我目前只有 5 个可用键,所以我只是为它们创建了一个特定的数组)。

但是,虽然 2 键或更少键一切正常,但游戏无法正确检测 3 键或更多键。虽然对于某些键,它可以正确检测到组合(实际上只发生在 1 个特定组合中),但对于其他键,功能根本不会检测到我按下的第三个键。

我检查了我的代码几次,这个组合并没有什么特别之处。 我还让 glutKeyboardFunc 和 glutSpecialFunc 直接打印他们收到的每个按键,而且似乎在我按下超过 2 个键后它们就停止工作了。

这是 GLUT 的已知问题还是什么?我google了很多,没有找到有类似问题的人。

【问题讨论】:

  • 您是否测试过,您是否在任何其他程序中获得超过 2 个密钥?你确定你的键盘可以处理超过 2 键翻转吗?

标签: c opengl keyboard glut


【解决方案1】:

我不太喜欢 GLUT,但我知道,但您应该确保您的键盘一次支持 2 个以上的输入键。此功能称为n-key rolloverThis page 说,2 键翻转可能是某些键盘的常用值,但您无需信任此来源。

【讨论】:

  • 看来你是对的。我不敢相信我的键盘不能识别 3 个键,但我做了一些测试,它真的无法检测到 2 个方向键和空格键的组合。我只是将空格键更改为其他键,一切正常。感谢您的建议!
【解决方案2】:

我要澄清一点: glutKeyBoardFunc 是一个回调,即,它会在每次按下并一遍又一遍地重新执行时被调用,并且各种组合键的所有 if-else(或 switch-case)语句都是执行。这意味着 - 如果您要同时按下“A”、“->”(右箭头)和“D”,则取决于首先收到哪个按键事件,回调将相应地执行。有时会有延迟,有时屏幕上的动画可能会暂时停止。

GLUT 纯粹用于教育/学习目的,但不适用于成熟的应用程序,因为这不是它的设计目的。您使用特定于操作系统的库或其他语言(例如 Qt)在其中嵌入 OpenGL“窗口”并执行键盘事件等,这些(和/或特定于操作系统的框架)中的事件处理完全不同(并且更好) 比过剩。

您可能希望将同时按键次数降至最低。您可以使用鼠标对其进行扩充,以摆脱生涩的响应/处理...

【讨论】:

  • 我知道,但我还是更喜欢使用它,因为我不是在做一个真正的大项目,但我只是尝试创建一个用于学习目的的小游戏。在完成我目前的小型射击游戏横向卷轴后,我可能会搬到 SDL。
猜你喜欢
  • 1970-01-01
  • 2016-01-04
  • 2022-06-28
  • 2010-10-26
  • 1970-01-01
  • 1970-01-01
  • 2017-07-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多