Java Swing - нажатая клавиша не выпускается (иногда) - PullRequest
1 голос
/ 18 июля 2011

Для игры я использую KeyListener, чтобы узнать, когда нажата клавиша.

public synchronized void keyPressed(KeyEvent e) {
    if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
        keyRightIsDown = true;
    }
}

public synchronized void keyReleased(KeyEvent e) {
    if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
        keyRightIsDown = false;
    }
}

Это работает на 99,9%. Но время от времени (достаточно часто), keyReleased не вызывается, когда клавиша отпускается (из-за чего игровой персонаж продолжает двигаться вправо - повторное нажатие клавиши решает проблему).

[Может быть уместно:] Я использую OSX 10.6 и часто нажимаю одновременно несколько клавиш.

Как я могу сделать эту работу на 100%?

Ответы [ 2 ]

1 голос
/ 18 июля 2011

похожие вопросы задавались несколько раз, взгляните на

как узнать, когда пользователь действительно выпустил ключ в java

или

как остановить многократные нажатые клавиши-события-в-колебании

надеюсь, это поможет;

edit:

, что вы можете сделать, использует механизм опроса:

static Toolkit kit = Toolkit.getDefaultToolkit();
..
if (kit.getLockingKeyState(KeyEvent.VK_X))
..

это означает, что вы всегда проверяете в своей ветке, нажата ли определенная клавиша.Но имейте в виду, что опрос не эффективен.

1 голос
/ 18 июля 2011

может быть лучше посмотреть на KeyBindings , это легко построить Listener для ключевых действий как KeyListener

...