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

SFML pollEvent is making pauses when I continuesly press Keys

显然,当我连续按下某个键时,我的 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: 别介意我的事件图,我觉得跟停顿真的关系不大

实际上我在阅读 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

之外检查您的事件

谢谢你的评论:)