如何在按键后清除事件输入?

How to clear event input after a key press?

当我按下 F 时,我的控制器启动 – 一切正常。但是,当 F 被按下两次时,它会触发,并且在处理完第一个事件(200 毫秒后)后,它会再次触发,这不是我想要的。我想在第一次触发后清除所有输入。

我的代码是:

sf::Event event;
while (window.waitEvent(event))
{
    if (event.type == sf::Event::Closed)
        window.close();
    else if (event.type == sf::Event::KeyPressed)
    {
        if (event.key.code == sf::Keyboard::F) //fire
            {
                 controleur.Shot(45, 100); //this step during 200ms
            }
     }
}

只需使用一个变量"isShooting"来防止您的控制器射击。

void Controleur::Shot(int a, int b)
{
  if (!this->isShooting)
  {
    this->isShooting = true;
    // do stuff
  }
}

当你的动作完成后,只需将变量设置为false,然后你就可以再次射击了。

编辑:没关系,我误解了你的问题

您可以使用 sf::Input 中的 sf::Input::IsKeyDown 来查看在计算事件时您的键是否被按下。

另一种方法是在 Shot() 结束后使用此代码

刷​​新事件队列
// consumes all events in the queue
while (window.pollEvent(event));

但我认为这不是一件好事。