Событие удерживания клавиши на SFML

Пытаюсь сгенерировать событие удерживания клавиши на SFML, но не могу найти нужный метод. В данный момент событие отрабатывается но по умолчанию, как если бы вы нажали на любую клавишу буквы на клавиатуре в текстовом окне: после не большой паузы, отрабатывается со скоростью повтора нажатия, а хотелось бы без паузы и не так быстро. Если есть какой-то вариант буду рад помощи.

sf::RenderWindow window(sf::VideoMode(400, 300), "Draft");
    
while (window.isOpen())
{
    sf::Event event;
    while (window.pollEvent(event))
    {
        if (event.type == sf::Event::Closed)
            window.close();

        if (event.type == Event::KeyPressed)
            if (event.key.code == Keyboard::Space)
                std::cout << "PRESS Space!!!\n";
    }

    window.clear();
    window.display();
}

PS на комментарии не отвечаю.


Ответы (1 шт):

Автор решения: citn

используй sf::Keyboard::isKeyPressed - он как раз и проверяет состояние клавиши в каждом кадре. То есть вместо твоего KeyPressed(которое обрабатывает событие), можно проверять удерживается ли клавиша с помощью вышеупомянутого метода.

на всякий случай, если хочешь контролировать частоту вывода сообщений - добавь таймер sf::Clock, потом добавляешь интервал. получится так, что вывод будет не каждую итерацию, а раз в определенное время

Код:

while (window.isOpen())
    {
        Event event;
        while (window.pollEvent(event))
        {
            if (event.type == Event::Closed)
                window.close();
        }

        // Проверяем, удерживается ли клавиша Space
        if (Keyboard::isKeyPressed(Keyboard::Space))
        {
            std::cout << "PRESS Space!!!\n";
        }

        window.clear();
        window.display();
    }
→ Ссылка