C++ 使keystate仅燃烧一次

C++ 使keystate仅燃烧一次,c++,sdl,sdl-2,C++,Sdl,Sdl 2,我正在对菜单进行编码,并使用keyState[SDL\u SCANCODE\u KEY]来检测在这样的循环中按下某个键的时间: if (Button1 && keyState[SDL_SCANCODE_DOWN]) { Button1 = false; Button2 = true; } else if (Button2 && keyState[SDL_SCANCODE_DOWN]) { Button2 = false; Butto

我正在对菜单进行编码,并使用
keyState[SDL\u SCANCODE\u 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
}

但是,此设置的问题是,当用户按下向下键时,keystate会多次激发,保持按钮2切换到按钮3的条件处于活动状态,依此类推。那么,如何使keystate只触发一次,或者至少修复此问题?谢谢。

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

为了简单地解决这个问题,可以使用delay。最后,试试看

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

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

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

为了简单地解决这个问题,可以使用delay。最后,试试看

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

您可以通过修改数字(即1000)来调整长度,但请注意,在复杂系统中,使用延迟功能可能非常关键。在该系统中,可以使用定时器,但实现起来要比这复杂得多。

我相信这与固件有关,您正在从键盘接收按键。是吗?@Sean83是的,我收到了键盘上的按键。@我不清楚你想要实现什么。如果您希望用户在再次对按钮作出反应之前释放按钮,您可能希望使用keystate中的keydown/keyup事件(请注意,按键事件是重复的,但它有一个布尔标志来确定它是真实的还是重复的)。@keltar谢谢,这正是我一直在寻找的解决方案。我相信这与固件有关,您正在从键盘接收按键。是吗?@Sean83是的,我收到了键盘上的按键。@我不清楚你想要实现什么。如果您希望用户在再次对按钮作出反应之前释放按钮,您可能希望使用keystate中的keydown/keyup事件(请注意,按键事件是重复的,但它有一个布尔标志来确定它是真实的还是重复的)。@keltar谢谢,这正是我所寻找的解决方案。我已将此标记为答案,尽管采用这种方法存在明显的输入滞后。谢谢。添加了一些评论。因为我不知道你在用什么系统,所以我不能给你一个关于定时器的直接答案。我已经把这个标记为答案,尽管这个方法有明显的输入滞后。谢谢。添加了一些评论。因为我不知道你们在用什么系统,所以我不能给你们一个关于定时器的直接答案。