В основном я пытаюсь переключать булевы каждый раз, когда нажата клавиша F1. В моем главном классе у меня есть метод обновления, который называется 60 раз в секунду, и я закодированы что-то вроде этого:Переключить ключ в Java
Main.class:
private Keyboard key = new Keyboard; // keyboard object
boolean debug; // boolean to control visibility of debug screen
private boolean toggle; // used to toggle boolean
private void update() { // update is called 60/s
if (key.isKeyPressed(Keyboard.f1) && !toggle) {
debug = !debug;
toggle = true;
} else if (!key.isKeyPressed(Keyboard.f1)) toggle = false;
}
Keyboard.class:
public class Keyboard implements KeyListener {
private boolean[] keys = new boolean[65536];
public static final int f1 = KeyEvent.VK_F1; // key code of f1 key
public void keyPressed(KeyEvent e) {
keys[e.getKeyCode()] = true;
}
public void keyReleased(KeyEvent e) {
keys[e.getKeyCode()] = false;
}
public void keyTyped(KeyEvent e) {
}
public boolean isKeyPressed(int key) {
return keys[key];
}
И таким образом он отлично работает, но если я создам аналогичный метод в Keyboard.class, он не будет работать:
метод обновления в основном классе:
private void update() {
key.toggle(Keyboard.f1, debug); // toggle boolean debug if f1 key pressed, but.. NOT WORKING!! WHYYY!!?
}
Keyboard.class:
private boolean toggle;
public void toggle(int key, boolean b) {
if (isKeyPressed(key) && !toggle) {
b = !b;
toggle = true;
} else if (!isKeyPressed(key)) toggle = false;
}
И мой вопрос: Почему второй способ не работает, и как я могу исправить это работать? Спасибо!
Вы не обновляете массив 'keys', поэтому в теории всегда нажата клавиша F1. Использование 'b =! B' бесполезно, поскольку параметр будет изменяться только в контексте метода, изменение не будет отражено для вызывающего – MadProgrammer