SFML pollEvent делает паузы, когда я продолжаю нажимать клавиши - PullRequest
0 голосов
/ 21 ноября 2018

Очевидно, что 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 голосов
/ 22 ноября 2018

На самом деле я решил это, читая документацию 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's While

Спасибо за комментарии в любом случае:)

...