当我继续按键时,SFML pollEvent会暂停

时间:2018-11-20 23:42:07

标签: c++ sfml

当我连续按下一个键时,很明显我的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:别介意我的活动地图,我认为它与暂停无关!

1 个答案:

答案 0 :(得分:0)

实际上,我在阅读sfml文档时为懒惰的人voila解决了问题:

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的Pool,因此请检查pollEvent的While之外的事件

仍然感谢您的评论:)