当我按 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
}
}
}
答案 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));
但我认为这不是一件好事。