SWT: проверьте, нажаты ли несколько клавиш одновременно - PullRequest
3 голосов
/ 08 сентября 2010

Я хочу разработать небольшую игру на Java и SWT. По этой причине я должен реагировать на KeyEvents. Как я могу проверить, например, клавиши со стрелкой вверх и 'q' нажаты вместе?

Заранее спасибо
Финес

Ответы [ 4 ]

5 голосов
/ 08 сентября 2010

SWT не имеет концепции нажатия друг на друга (если вы не говорите о стандартных клавишах-модификаторах, таких как shift, alt и т. Д.). Что вы можете сделать, так это перехватывать события как стрелки вверх, так и клавиши q по отдельности. Если время является проблемой, тогда вы можете сравнить две метки времени (в KeyEvent есть поле времени) и определить, какое у вас определение вместе (50 мс? Вы можете поэкспериментировать).

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

2 голосов
/ 09 сентября 2010

На самом деле, вы можете реализовать это.Каждая клавиша «вниз» и «вверх» имеет свое собственное событие, так что вы точно знаете, какие клавиши нажимаются, а какие нажимаются в любой момент.

Пример. Когда запускается событие нажатия клавиши «Стрелка вниз», вы начинаете перемещать правое колесико вниз.Когда срабатывает событие нажатия клавиши X, вы начинаете перемещать левую лопасть вниз.Когда запускается событие нажатия клавиши X, вы прекращаете движение на левом колесе, а когда срабатывает событие нажатия клавиши со стрелкой вниз, вы прекращаете перемещать правое колесо.=> Вы управляете ими независимо друг от друга.

Вы можете обернуть все это в какую-то утилиту, которая сделает решение чище.

0 голосов
/ 09 сентября 2010

Спасибо за ваши ответы!Я просто думал, что смогу разработать небольшую игру понг довольно быстро, но я не знал, что привязки клавиш настолько сложны в обращении!Основным препятствием является то, что две лопасти должны перемещаться независимо (в настоящее время нажатие клавиш мешает движениям противника и наоборот).

0 голосов
/ 08 сентября 2010
Решение

rancidfishbreath будет работать.Отличный пример см. http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet25.java

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...