【发布时间】:2014-11-17 12:11:41
【问题描述】:
我正在尝试跟踪按下的键。我有glutIgnoreKeyRepeat(1) 并且我在一个跟踪按下的键的对象中注册了键事件(正常和特殊的向下/向上)(从现在开始称为按下的键列表),以便我只需检查我的显示功能如果通过查看该列表按下了某个键。
问题在于 SHIFT:不同的键注册为 DOWN 和 UP(取决于是否按下了 SHIFT)对于相同的物理键盘键(例如。 a 和 A、1 和 !、[ 和 { 等)
考虑一下({key1 key2} 代表我在事件发生后按下的按键列表):
- 初始状态:{} 没有键被列为按下
- SHIFT 向下:{SHIFT}
- a DOWN : {SHIFT A} (因为 SHIFT 仍然向下,大写的“A”注册为键下来。
- SHIFT 上移:{A}
- a UP: {A} (因为 SHIFT 没有按下,较低的 'a' 注册为向上键,所以 a 被从按下的键列表中删除(实际上不存在),并且 A 仍然存在)
- 最终状态:{A},即使键盘上仍然没有按下任何键。
对于 alpha 键,我可以通过添加/删除键的小写字母(a 而不是 A)来解决这个问题。
但是 1 和 ! 或 [ 和 { 呢? glutGetModifiers 在这里没有帮助。或者如果按下一个键,窗口失去焦点,释放该键,窗口又获得焦点(没有事件告诉窗口失去焦点时释放了键)?
是否有通用的解决方案来检查是否按下了某个键? (平台相关的解决方案还可以,另一个库不适合我,但可能适合其他需要解决这个问题的人)
【问题讨论】:
-
检查this解决方案。
-
@Skynet 使用另一个库或 windows api。对我没有帮助,但还是谢谢。
-
好的,抱歉没检查
标签: c linux opengl glut keyboard-events