使键态触发仅触发一次

Make keystate fire only fire once

我正在编写一个菜单,并使用 keyState[SDL_SCANCODE_KEY] 来检测何时按下循环中的某个键,如下所示:

if (Button1 && keyState[SDL_SCANCODE_DOWN])
{
    Button1 = false;
    Button2 = true;
}
else if (Button2 && keyState[SDL_SCANCODE_DOWN])
{
    Button2 = false;
    Button3 = true;
}
else if (button3 && keyState[SDL_SCANCODE_DOWN])
{
    //and so on
}

然而,此设置的问题在于,当用户按下向下键时,键状态会多次触发,从而使按钮 2 切换到按钮 3 的条件保持活动状态,依此类推。那么如何让键态只触发一次,或者至少解决这个问题呢?谢谢。

发生这种情况是因为您的系统 (CPU) 运行速度太快。为避免这种情况,您可以使用计时器或延迟。

简单的解决,可以使用延迟。最后,尝试

delay(1000); // which means delay 1000 clock cycles.

您可以通过修改数字(即 1000)来调整长度,但请注意,在复杂的系统中使用延迟功能可能至关重要。在该系统中,可以使用Timer,但实现起来比这更复杂。