Я занимаюсь разработкой небольшого 2D-движка на Java, поиграв с моей демонстрационной игрой на виртуальной виртуальной машине VirtualBox с Ubuntu, я обнаружил странную ошибку, которая иногда заставляла игру игнорировать тот факт, что клавиша нажата. Таким образом, вы бежите налево, пока внезапно не перестанете двигаться.
Теперь под настоящей Ubuntu я нашел причину проблемы. Когда я удерживаю клавишу, события keyPress / keyRelease отправляются постоянно.
Моя система для проверки нажатых клавиш выглядит следующим образом:
- если клавиша нажата, добавьте ее в «downlist»
- если ключ отпущен, добавьте его в список
- на каждом кадре игры удаляйте ключи из списка вверх из списка вниз
- если клавиша все еще находится в списке, она нажата
Теперь, когда вы нажимаете вторую клавишу, иногда keyRelease был последним событием, вызванным другой клавишей, которая все еще удерживается, но не распознается таким образом.
Есть идеи как это исправить? Это действительно раздражает.
EDIT
Для пояснения это результат, который я получаю, когда постоянно удерживаю клавишу:
нажата: 87
выпущено: 87
выпущено: 87
нажата: 87
выпущено: 87
нажата: 87
выпущено: 87
нажата: 87
выпущено: 87
и т.д.
EDIT2
Хорошо, погуглив немного больше, я обнаружил, что это «особенность» сервера X11, но я до сих пор не знаю, как обнаружить «поддельные» события клавиш в java.