使keystate fire只开火一次

时间:2016-11-14 05:51:39

标签: c++ sdl sdl-2

我正在编写一个菜单并使用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激活等等。那么如何才能让keystate只触发一次,或者至少解决这个问题呢?感谢。

1 个答案:

答案 0 :(得分:0)

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

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

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

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