如何在按键后清除事件输入?
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));
但我认为这不是一件好事。
当我按下 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));
但我认为这不是一件好事。