GLFW输入状态

GDN*_*DN9 1 c++ input glfw

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

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

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

  • 按Tap(做一次)

  • 重复连续(每帧都做)

  • 释放不要回应

链接

请查看上面链接中的文件,如果还有其他方法,请告诉我.或者这种做法本身就是垃圾,我这样做的方式是什么?谢谢大家,所有反馈和帮助相关.

Som*_*ude 6

一种方法是简单地忽略"重复"事件,并且仅使用"按下"和"释放"事件.

当你得到"按下"事件时设置一个标志,并清除"释放"事件上的标志.然后只需每帧检查一次该标志.


Nic*_*las 5

“按下”和“重复”之间有一个延迟非常重要。大多数人无法按下和释放按键,因此您的游戏仅记录按下的按键恰好一帧。而少数有能力做到这一点的人却无法始终如一地、准确地做到这一点。

所以用户永远无法“做一次”。他们将为多个帧执行此操作。这通常是不好的。

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

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

如果您只想在“刚刚按下”按钮时执行操作,那么您需要知道在前一帧中没有按下该按钮。如果现在按下该键但未在前一帧中按下该键,则执行该操作。