Когда ты вам не нужно беспокоиться о вводе в реальном времени клавиатуры, вы можете использовать подход, очень похожий на предоставленный вами SFML-код 1.6. В цикле обработки событий вашего приложения, вы можете сделать что-то вроде этого:
sf::Event event;
while (mWindow.pollEvent(event))
{
if (event.type == sf::Event::KeyPressed)
{
if (event.key.code == sf::Keyboard::Escape)
{
// Do something when Escape is pressed...
}
if (event.key.code == sf::Keyboard::W)
{
// Do something when W is pressed...
}
// And so on.
}
}
Этого типа обработки ввода приятно, когда вы должны гарантировать ваше приложение имеет фокус, когда пользователь нажимает клавишу, а ключевые события не генерируются в противном случае. Это также здорово, когда ключевой вопрос нажимается нечасто. Вы можете посмотреть пример этого из учебников SFML 2.0 здесь, в разделе «События KeyPressed и KeyReleased»: http://sfml-dev.org/tutorials/2.0/window-events.php
С другой стороны, вам действительно может потребоваться доступ к клавиатуре в реальном времени. Для этого используется класс Keyboard SFML 2.0 как это:
if (sf::Keyboard::isKeyPressed(sf::Keyboard::W))
{
// 'W' is currently pressed, do something...
}
С вводом в реальном времени, вы получаете доступ состояние устройства ввода в данный конкретный момент времени. Это удобно, потому что вам не нужно блокировать все проверки ключей в цикле обработки событий. Недостатком такого подхода является то, что SFML просто считывает состояние клавиатуры, ваш код обработки событий все равно может выполняться, если приложение не имеет фокуса, минимизировано и т. Д. Вы можете найти учебник по всем входам в реальном времени здесь: http://sfml-dev.org/tutorials/2.0/window-inputs.php
Будьте осторожны при выборе процесса обработки событий в реальном времени. Для примера игры рассмотрите ситуацию, когда персонаж запускает пулемет, когда пользователь удерживает пробел. Если вы обрабатываете пробел в цикле обработки событий, пулемет неправильно срабатывает, как полуавтоматический, так как существует задержка между sf::Event::KeyPressed
событиями для одного и того же ключа, даже если пользователь удерживает клавишу нажатой. Если вы обрабатываете пробел, проверяя ввод в реальном времени клавиатуры, пулемет будет срабатывать многократно, как и ожидалось.
Документация содержит всю необходимую информацию: http://sfml-dev.org/documentation/2.0/ –
http://sfml-dev.org/documentation/2.0/classsf_1_1Event.php, если быть точным – elimirks