gpt4 book ai didi

c++ - 当我继续按下按键时,SFML pollEvent 正在暂停

转载 作者:太空宇宙 更新时间:2023-11-04 12:42:38 24 4
gpt4 key购买 nike

显然,当我连续按下某个键时,我的 pollEvent 会稍作停顿,

例如,如果按下但不释放一个键,它会调用按下事件,但会暂停 0.5 秒,只有在那之后才开始连续调用按下事件简单地说,如果我只是按下一个键而不松开它,它会给我这样的输出:

按A键

暂停

按A键

按A键

按A键

按A键

. . .

这对我的游戏来说有点问题。我的 pollEvent 循环:

std::map<_KEYS, bool>   Display::checkEvents()
{
resetEvents();
while (_Window.pollEvent(_Event))
{
if (_Event.type == sf::Event::Closed)
quit();
if (_Event.type == sf::Event::KeyPressed) {
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Up)) {
puts("key up pressed");
_Events.at(_KEY_UP) = true;
}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Down)) {
puts("key down pressed");
_Events.at(_KEY_DOWN) = true;
}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left)) {
puts("key left pressed");
_Events.at(_KEY_LEFT ) = true;
}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Right)) {
puts("key right pressed");
_Events.at(_KEY_RIGHT) = true;
}
}
return (_Events);
}

知道为什么吗?或者我该如何解决这个问题?

PS:不要介意我的Event map,我觉得跟停顿真的差很远

最佳答案

实际上我在阅读 sfml 文档时解决了这个问题,对于懒惰的人来说,瞧:

std::map<_KEYS, bool>   Display::checkEvents()
{
resetEvents();
while (_Window.pollEvent(_Event))
{
if (_Event.type == sf::Event::Closed)
quit();
}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Up)) {
puts("key up pressed");
_Events.at(_KEY_UP) = true;
}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Down)) {
puts("key down pressed");
_Events.at(_KEY_DOWN) = true;
}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left)) {
puts("key left pressed");
_Events.at(_KEY_LEFT ) = true;
}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Right)) {
puts("key right pressed");
_Events.at(_KEY_RIGHT) = true;
return (_Events);
}

您需要检查实时输入而不是 sfml pollEvent 的池,因此请在 pollEvent 的 While 之外检查您的事件

无论如何感谢您的评论:)

关于c++ - 当我继续按下按键时,SFML pollEvent 正在暂停,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53403266/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com