Java KeyListener не содержит логические значения, как задумано - PullRequest
0 голосов
/ 02 октября 2018

Вот мой класс Input:

private boolean[] keys = new boolean[256];
private boolean[] keys_last = new boolean[keys.length];

public Input(Window window) {
    window.getCanvas().addKeyListener(this);
}

public boolean isKey(int keyCode) {
    return keys[keyCode];
}

public boolean isKeyDown(int keyCode) {
    return keys[keyCode] && !keys_last[keyCode];
}

public boolean isKeyUp(int keyCode) {
    return !keys[keyCode] && keys_last[keyCode];
}

public void keyPressed(KeyEvent e) {
    keys[e.getKeyCode()] = true;
}

public void keyReleased(KeyEvent e) {
    keys[e.getKeyCode()] = false;
}

public void keyTyped(KeyEvent e) {}

public void tick() {
    for (int i = 0; i < keys.length; i++) {
        keys_last[i] = keys[i];
    }

}

public boolean[] getKeys() {
    return keys;
}

public boolean[] getKeysLast() {
    return keys_last;
}

Затем в моем классе Window сейчас я проверяю входные данные.Мой метод isKey (keyCode) работает правильно, но мои isKeyDown () и isKeyUp () не работают так, как я думал.Я хочу, чтобы isKeyDown () было истинным в первом кадре, когда кнопка нажата, а isKeyUp () истинно в первом кадре, когда кнопка была отпущена.

Моя теория состоит в том, что если вы нажимаете кнопку,значение ключа int [] будет true, а значение keys_last int [] будет false для этого тика.

Однако, когда для каждого тика я показываю значение истинности конкретного ключа (например, F)я не могу найти ни одного кадра, который бы показывал ключи [70] и keys_last [70] с противоположными значениями (70 - это F).

...