Событие удерживания клавиши на 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 шт):
используй 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();
}