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

时间:2016-02-23 22:47:06

标签: c++ events sfml

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

我的代码是:

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
            }
     }
}

1 个答案:

答案 0 :(得分:0)

只需使用变量“isShooting”即可防止你的控制器被击中。

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

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

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

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

另一种方法是使用此代码在Shot()结束后刷新事件队列

// consumes all events in the queue
while (window.pollEvent(event));

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