Я не могу говорить о некоторых из этих других фреймворков, но я знаю, что XNA в основном позволяет вам опрашивать текущее состояние ввода (кнопки вверх или вниз?) В любое время. Вы обычно делаете это каждый кадр.
Это означает, что если ваш игрок является ниндзя и может нажимать клавиши быстрее, чем 60FPS, возможно, что они могут нажать клавишу (или кнопку мыши) между опросами, и вы пропустите это. На практике это почти никогда не является проблемой.
Если это вас беспокоит, решение этой проблемы - подключить насос сообщений Windows и получать события клавиатуры вверх / вниз.
Для общего игрового процесса это действительно не стоит усилий. Обычно единственное время, когда вы действительно должны фиксировать каждое нажатие клавиши, - это когда пользователь печатает текст. Поэтому вместо захвата событий клавиш вверх / вниз вы фиксируете события персонажа (WM_CHAR
). Это означает, что вы не пропустите нажатие клавиши. Но более важная проблема, которую он решает, заключается в том, что он переносит преобразование ключа в символ в Windows - что позволяет ему обрабатывать повтор клавиатуры, раскладку клавиатуры, сдвинутые символы и т. Д. - позволяя вашей игре вести себя как любое другое приложение Windows. .
(Конечно, если вы можете обойтись без простого использования входных данных фреймворка, основанного на опросе - продолжайте в том же духе - это намного проще реализовать и меньше зависит от платформы.)
Вышеуказанное имеет значение, только когда вы обнаруживаете различные нажатия клавиш (например, нажмите, чтобы выстрелить из этого пистолета), а не удерживаете клавиши в нажатом положении (например: ускорение этого транспортного средства).
Альтернативная интерпретация вашего вопроса заключается в том, что вы предполагаете, что ключ может появиться на полпути через фрейм - как вы это учитываете в игре с дискретным временным шагом?
Как правило, вы не беспокоитесь об этом. Так же, как 60 кадров в секунду достаточно быстры, чтобы дискретно вычислить состояние вашей игры и казаться человеку плавным и непрерывным, это достаточно быстро, чтобы принять ввод.
Но что произойдет, если вы не используете 60FPS? Если вы используете 30FPS (как на мобильной платформе), тогда ваши входы - особенно аналоговые входы - будут намного плавнее, если вы наберете 60FPS. Самый простой способ сделать это - просто сделать два Update
с для каждого Draw
- если ваше Обновление не слишком обременительно для ЦП.