SFML 2.0: Keyboard::isKeyPressed не всегда возвращает правильный результат

bool m_down = sf::Keyboard::isKeyPressed(sf::Keyboard::Key::M);
bool up_down = sf::Keyboard::isKeyPressed(sf::Keyboard::Key::Up);
bool down_down = sf::Keyboard::isKeyPressed(sf::Keyboard::Key::Down);
bool left_down = sf::Keyboard::isKeyPressed(sf::Keyboard::Key::Left);
bool right_down = sf::Keyboard::isKeyPressed(sf::Keyboard::Key::Right);

Этот код в основном является единственным соответствующим кодом.

Когда я удерживаю некоторые другие клавиши одновременно с M и клавишей [n] со стрелкой [s], кажется, что при нажатии m она возвращает false. (Хотя это и есть)

У меня нет кода, манипулирующего им, ломающего и т. д., и я хотел бы получить некоторое представление о том, почему это происходит, если это возможно, и как это исправить.

Если нет возможности исправить, то не могли бы вы посоветовать лучший способ переделать эту функцию на моей стороне с помощью системы событий?


person Ashley Davies    schedule 08.09.2012    source источник
comment
Это может оказаться полезным.   -  person Alex    schedule 08.09.2012
comment
Мм, а если бы я тоже использовал подход, основанный на событиях, это было бы применимо?   -  person Ashley Davies    schedule 08.09.2012
comment
Я так считаю. Каждый раз, когда у вас слишком много клавиш, клавиатура просто игнорирует последующие нажатия клавиш, пока не появится одна из клавиш. В любом случае не должно быть сложно настроить тестовый пример для двойной проверки.   -  person Alex    schedule 09.09.2012
comment
Ок, спасибо за помощь. Если вы просто добавите это в ответ, я соглашусь, чтобы вы получили от него некоторую репутацию.   -  person Ashley Davies    schedule 09.09.2012


Ответы (1)


Согласно комментариям, эта ссылка здесь объясняет, что существует неотъемлемое ограничение клавиатуры. Большинство клавиатур могут регистрировать только определенное количество нажатий клавиш в любой момент времени и игнорировать любые последующие нажатия клавиш, пока вы не отпустите одну или несколько текущих клавиш. Это не относится к клавишам-модификаторам (таким как Ctrl, alt и shift), поскольку эти клавиши обрабатываются особым образом (поскольку они предназначены для использования в тандеме с другими клавишами).

person Alex    schedule 09.09.2012