GLUT跟踪按下的按键(当按下SHIFT键并释放按键时)

我试图跟踪按下的按键。 我有glutIgnoreKeyRepeat(1) ,我注册的关键事件(向下/向上为正常和特殊)在一个对象,跟踪按键(从现在开始被称为按键列表),以便我只是检查我的显示如果通过查看该列表来按下某个键,则该函数将被调用

问题出SHIFT上不同的按键注册为同一个物理键盘按键(例如aA1[{等等))的向上和向下(取决于SHIFT是否被按下)

考虑这个(用{ key1 key2 }代表事件之后我按下的按键列表):

  • 初始状态:{}没有按键列出按键
  • 向下移动:{ SHIFT }
  • 一个 DOWN:{ SHIFT A }(因为SHIFT仍然closures,大写“A”注册为关键字。
  • 转移 :{ A }
  • 一个 UP:{ A }(因为没有按下SHIFT键,下面的'a'作为键注册,所以a被从按下的键列表中删除(实际上不存在),并且A仍然存在)
  • 最终状态:{ A }即使键盘上仍然没有按键。

对于阿尔法按键,我可以通过添加/删除小写键(而不是A )来解决这个问题。

但是, 1[{glutGetModifiers在这里没有帮助。 或者如果一个按键被按下,窗口失去焦点,键被释放,窗口再次获得焦点(当窗口失去焦点时没有事件告诉键被释放)?

有没有一个通用的解决scheme来检查一个键是否被按下? (依赖于平台的解决scheme是可以的,另一个库不适合我,但是对于需要解决这个问题的其他人也是如此)

你想要的是键盘上的按键的物理号码。 这些在苹果和PC键盘上是不同的,并且在字母改变位置的其他国家的键盘上也可以不同。

大多数程序不关心键码,他们需要实际的字母和修饰键,所以系统事件处理程序提供了从键码到目标字符/特殊键的翻译。 GLUT被设计为简单,便携和跨平台,所以使用这些例程。

如果你正在写一个游戏或模拟器,只是降低一切可能足够好。 对于这种高速交互,大多数玩家不会想区分1和!,或2和@。 Ins / Del和箭头键块(通常)没有多个符号,而且数字键盘对于大多数人来说同样需要按住一个修改键而太远了。

如果你确实需要跟踪每一个关键状态,抱歉,GLUT不会为你工作。 在MacOS上,您要求NSKeyEvent键码,在MS Windows上使用DirectX,在Linux上使用XKeyPress | ReleaseEvent键码。

希望这可以帮助。