切换变量但输入是连续的算法

问题描述

我正在编写一个从xBox控制器读取输入的程序,并且在代码中有一些布尔变量需要切换。我的功能有这个模板。

void toggle(bool condition,bool &variable) // Used to toggle variables
{
}

条件参数将是控制器上的一个按钮(例如buttonA),变量参数是对需要切换的变量(例如蹲伏)的引用

问题在于,由于控制器的输入一直被读取,因此玩家不能足够快地按下和释放按钮,以至于不能多次读取,这导致我尝试切换的变量只能快速地来回切换。我想要的行为是,当按下A时,蹲伏的值更改为与它相反的值(蹲伏=蹲伏),但是我只希望它在按下按钮时运行一次,然后等待释放才能再次调用函数。我已经尝试过,但是我无法找出一种算法来做到这一点。任何帮助表示赞赏!

解决方法

这是RAW输入的常见问题。因此,操作系统提供了各种类型的事件及其处理程序。一个示例是WM_KEYDOWN here
如果只有原始输入是唯一的选择,则可以有一个中间过滤器,其结果可用于根据情况实际切换变量。

例如,如果r,P表示按钮的释放和按下状态,则类似rrrrrrrrrrrrrrPPPPrrrrrrrrrrrrPPrrrrrrrrrrr之类的序列表示您需要在r -> P转换发生时进行切换。可能是您可以拥有一个只有2个元素的数组,并且您可以像这样进行操作 sample [1] = sample [0]; sample [0] = control.state; if(sample [0] =='r'&& sample [1] ='P')然后太小(变量)

此外,您可以尝试使用更大的阵列来避免任何杂散噪声,基本上采用基于最小人类按键持续时间和未采样率的阈值。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...