SDL2 - Как обрабатывать / избегать двух одновременно нажатых кнопок геймпада - PullRequest
0 голосов
/ 09 марта 2019

Я провел последний год или около того, разрабатывая клон тетриса и на более высоком уровне, когда игра становится интенсивной, и вы играете с геймпадом, довольно легко одновременно нажимать две кнопки.Например, вверх и влево.Проблема в том, что «Up» - это сложная выпадение, а это означает, что вы можете довольно легко непроизвольно входить в ситуации с Game Over.

Я использую насос событий, и, как и ожидалось, когда одновременно нажимаются две кнопки на игровой клавиатуре, вы сначала получаетепервая кнопка и цикл обработки событий выходят из SDL_PollEvent, который выполняет действие для этой кнопки, а затем «Вниз» для второй кнопки и выход из цикла обработки событий, сопровождаемый двумя событиями «вверх».

Я пытался разрешить эту конкретную ситуацию, но так и не нашел подходящего решения, которое всегда работает.Ожидание комбо-события «Вниз / Вверх» перед выполнением действия не будет работать, поскольку оно повредит автоматическое повторение.

Для работы игры важна важная обработка команд ввода.Моя стратегия заключалась в том, чтобы переводить одновременные нажатия кнопок игровой клавиатуры, когда вместо этого используется Up, влево / вправо.

https://github.com/drpatrik/combatris/blob/master/combatris/src/combatris.cpp

Код начинается со строки 175 и довольно прост, ИМХО.Единственное решение, которое я могу придумать, - это прекратить использовать обработку событий, но тогда я потеряю много других полезных функций, таких как DB геймпада.

Поэтому я был бы признателен за любую помощь относительно того, как я могу решить эту проблему впоследовательный путь.

...