GLFW 输入状态

GLFW Input States

我在 GLFW 的输入系统上遇到了困难,弄清楚如何让它按照我想要的方式工作,所以我向有更多经验的人寻求智慧。使用 GLFW 3.

有3种状态0 Release,1 Press和2 Repeat。这正是我想要的,只是,从 Press 到 Repeat 的键状态需要大约一秒钟的时间才能改变。理想情况下,我希望它只有 1 帧处于 "Press" 状态,然后变为重复状态。

目标:能够根据我的密钥的状态轻松调用函数如下:

LINK

请查看上面 link 上的文件,如果有其他解决方法,请告诉我。还是这种方法本身就是垃圾,我这样做的方式?谢谢大家,感谢所有反馈和帮助。

一种方法是简单地忽略 "repeat" 事件,只处理 "press" 和 "release" 事件。

当你得到 "press" 事件时设置一个标志,并在 "release" 事件上清除标志。然后每帧检查这个标志。

非常重要的是"press"和"repeat"之间有一个延迟。大多数人无法按下和释放按键,因此您的游戏只会记录按下的按键正好一帧。少数能够做到这一点的人无法始终如一地做到这一点。

因此用户将永远无法 "do once"。他们将为多个帧执行此操作。这通常很糟糕。

此外,按下、按住和重复之间在概念上存在差异。按住就是按住键时发生的事情。重复是一种由 OS 控制的工具(这就是为什么 GLFW 没有给你设置重复率的方法)。按键重复通常用于文本输入(GLFW 会通过其基于文本的回调为您处理)。

本质上,你应该忽略它。在游戏场景中,一个键有 4 种可能的有用状态:未按下、刚刚按下、按住和刚刚松开。您可以从按钮的先前状态(您可以存储)和回调提供的按钮当前状态推断出这一点。

如果你只想在按钮"was just pressed"时执行一个动作,那么你需要知道按钮在上一帧中没有被按下。如果现在按下了键,但在上一帧没有按下,则执行此操作。