Я разрабатываю небольшой 2D-движок игры на Java, после игры с моей демо-игрой в виртуальной виртуальной машине VM Ubuntu, я обнаружил странную ошибку, которая иногда приводила к тому, что игра игнорируйте тот факт, что нажата клавиша. Таким образом, вы бежите влево, пока не перестанете двигаться.Java keyPress/keyRelease issue под Linux/X11
Теперь под реальным Ubuntu я нашел причину проблемы. Когда я держу ключ, события keyPress/keyRelease отправляются все время.
Моя система для проверки нажатых клавиш следующее:
- если ключ получает нажимается добавить его в «downlist»
- если клавиша отпущена добавить его в uplist
- на каждом кадре игра удалить ключи в uplist от downlist
- если ключ все еще находится в downlist это прессованный
Теперь, когда вы нажимаете вторую клавишу, иногда keyRelease был последним событием обстреляны другим ключом, который до сих пор но не признается таким образом.
Любые идеи, как исправить это? Это очень раздражает.
EDIT
Для осветления это результат я получаю, когда удерживая нажатой клавишу непрерывно:
нажата: 87
выпустили: 87
выпустили: 87
нажата: 87
выпустили: 87
press: 87
освобождено: 87
press: 87
освобождено: 87
т.д.
EDIT2
Ok после погуглить немного больше я узнал, что это «особенность» сервера X11, но я до сих пор понятия не имеют, как обнаружить «поддельные» ключевые события Ява.
да, но как вы обнаруживаете настоящий UP в настоящем? .. вам нужен кровавый таймер, чтобы узнать, скоро ли зарегистрируется Down. так чертовски уродливый. Linux разозлил меня. – Mordan