切换变量但输入是连续的算法
Algorithm to toggle a variable but the input is continuous
我正在制作一个从 xbox 控制器读取输入的程序,我在代码中有一些布尔变量需要切换。我的函数有这个模板。
void toggle(bool condition, bool &variable) // Used to toggle variables
{
}
条件参数将是控制器上的一个按钮(例如按钮 A),变量参数是对需要切换的变量的引用(例如蹲伏)
问题在于,由于控制器输入不断被读取,玩家无法足够快地按下和释放按钮,以至于不会多次读取,这导致我尝试切换的变量只是快速切换回来来回。我想要的行为是,当按下 A 时,蹲伏的值变为与其相反的值 (crouching = !crouching) 但我只希望它在按下按钮时变为 运行 一次并等待在可以再次调用函数之前释放它。我试过了,但我想不出一个算法来做到这一点。感谢您的帮助!
这是 RAW 输入的常见问题。这就是为什么有各种类型的事件及其处理程序 OS 提供的原因。例如 WM_KEYDOWN
here。
如果原始输入是唯一的选择,您可以有一个中间过滤器,其结果可用于实际切换您的情况下的变量。
例如,如果r,P
表示释放并按下按钮,则像rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr这样的序列,您需要意味着您需要在r -> P
过渡发生时切换它。也许你可以有一个只有 2 个元素的数组,你可以这样做
样本[1]=样本[0];样本[0]=control.state;
if(sample[0]=='r' && sample[1]='P') then toogle(variable)
此外,您可以尝试使用更大的阵列来避免任何杂散噪声,基本上采用基于最小人类按键持续时间和输入采样率的阈值。
我正在制作一个从 xbox 控制器读取输入的程序,我在代码中有一些布尔变量需要切换。我的函数有这个模板。
void toggle(bool condition, bool &variable) // Used to toggle variables
{
}
条件参数将是控制器上的一个按钮(例如按钮 A),变量参数是对需要切换的变量的引用(例如蹲伏)
问题在于,由于控制器输入不断被读取,玩家无法足够快地按下和释放按钮,以至于不会多次读取,这导致我尝试切换的变量只是快速切换回来来回。我想要的行为是,当按下 A 时,蹲伏的值变为与其相反的值 (crouching = !crouching) 但我只希望它在按下按钮时变为 运行 一次并等待在可以再次调用函数之前释放它。我试过了,但我想不出一个算法来做到这一点。感谢您的帮助!
这是 RAW 输入的常见问题。这就是为什么有各种类型的事件及其处理程序 OS 提供的原因。例如 WM_KEYDOWN
here。
如果原始输入是唯一的选择,您可以有一个中间过滤器,其结果可用于实际切换您的情况下的变量。
例如,如果r,P
表示释放并按下按钮,则像rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr这样的序列,您需要意味着您需要在r -> P
过渡发生时切换它。也许你可以有一个只有 2 个元素的数组,你可以这样做
样本[1]=样本[0];样本[0]=control.state;
if(sample[0]=='r' && sample[1]='P') then toogle(variable)
此外,您可以尝试使用更大的阵列来避免任何杂散噪声,基本上采用基于最小人类按键持续时间和输入采样率的阈值。