2013-05-20 3 views
0

В основном я пытаюсь переключать булевы каждый раз, когда нажата клавиша 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; 
} 

И мой вопрос: Почему второй способ не работает, и как я могу исправить это работать? Спасибо!

+0

Вы не обновляете массив 'keys', поэтому в теории всегда нажата клавиша F1. Использование 'b =! B' бесполезно, поскольку параметр будет изменяться только в контексте метода, изменение не будет отражено для вызывающего – MadProgrammer

ответ

1

Спасибо, MadProgrammer, вы правы! ; D

Main.class:

private void update() { 
    debug = key.toggle(Keyboard.f1, debug); 
} 

Keyboard.class:

private boolean toggle; 

public boolean toggle(int key, boolean b) { 
    if (isKeyPressed(key) && !toggle) { 
     b = !b; 
     toggle = true; 
    } else if (!isKeyPressed(key) && toggle) { 
     toggle = false; 
    } 
    return b; 
} 

Теперь она возвращает значение, что я хотел, спасибо человеку, я совершенно забыл об этом. Есть ли лучший/более простой способ сделать это?

Смежные вопросы