GLFW输入状态

GLFW Input States

本文关键字:状态 输入 GLFW      更新时间:2023-10-16

我很难使用GLFW的输入系统,弄清楚如何让它按我想要的方式工作,所以我找到了更有经验的人来获取智慧。使用GLFW 3。

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

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

  • 按下点击(做一次)

  • 重复连续(每帧)

  • 发布不响应

链接

请查看上面链接上的文件,让我知道是否有其他方法。或者这种方法本身就是垃圾,就像我做的那样?谢谢大家,所有的反馈和帮助都得到了认可。

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

当您获得"按下"事件时,设置一个标志,并清除"释放"事件上的标志。然后只需在每帧中检查此标志。

在"按下"answers"重复"之间有一个延迟是非常重要的。大多数人都无法按下和释放一个键,因此你的游戏只会记录按下的键,刚好一帧。少数有能力做到这一点的人不可能始终如一、准确无误。

因此,用户将永远无法"做一次"。他们将对多帧进行此操作。这通常很糟糕。

此外,按压、保持和重复之间存在概念上的差异。按住就是当你按下键时发生的事情。重复是一种由操作系统管理的功能(这就是为什么GLFW没有为您提供设置重复率的方法)。按键重复通常用于文本输入(GLFW无论如何都会通过其基于文本的回调为您处理)。

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

如果你只想在按钮"刚刚按下"时采取行动,那么你需要知道该按钮在前一帧中没有按下。如果现在按下了该键,但没有在上一帧中按下,请执行该操作。