Вот мой класс 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).