我正在尝试使用(免费)GLUT制作小游戏。我知道它已经老了,有更好的选择,但是目前我更喜欢坚持使用它并尽可能地使用它。我用C编程。
我正在尝试使GLUT正确检测我按下的所有按键。 我使用glutKeyboardFunc,glutKeyboardUpFunc,glutSpecialFunc和glutSpecialUpFunc来检测按下的键,并将它们的状态存储在我创建的一个短数组中(我目前只有5个可用的键,所以我只为它们创建了一个特定的数组)。
然而,虽然一切都可以正常工作2键或更少,但游戏无法正确检测3键或更多。虽然对于某些键,它可以正确地检测到组合(实际上仅发生在1个特定组合中),而对于其他键,这些功能根本无法检测到我按下的第三个键。
我检查了几次代码,并没有什么特别的组合可行。 我还使用glutKeyboardFunc和glutSpecialFunc直接打印他们收到的每个按键,看起来他们按下2个以上的按键后就停止了工作。
GLUT是一个已知的问题还是什么?我搜索了很多,并没有找到任何有类似问题的人。
答案 0 :(得分:4)
我不是很熟悉GLUT,但据我所知,但你应该确保你的键盘一次支持2个以上的输入键。此功能称为n-key rollover。 This页面说,对于某些键盘,双键翻转可能是一个常见值,但您不需要信任此来源。
答案 1 :(得分:1)
我将澄清一点:glutKeyBoardFunc是一个回调,即,对于按下并重复执行的每个键都会调用它,并且各种键组合的所有if-else(或switch-case)语句都是执行。这意味着什么 - 如果你要按'A',' - >' (右箭头)和'D'全部一次,取决于首先收到的按键事件,将相应地执行回调。有时延迟,有时屏幕上的动画可能会暂时停止。
GLUT纯粹用于教育/学习目的,但不适合全面应用,因为它不是它的设计目的。您使用特定于操作系统的库或其他语言(例如,Qt)登陆,在其中嵌入OpenGL“窗口”并执行键盘事件等。这些(和/或特定于操作系统的框架)中的事件处理完全不同(并且更好) )比GLUT。
您可能希望将同时按键保持在最低限度。您可以使用鼠标来增强它以消除生涩的响应/处理......