2013-05-20 40 views
0

基本上我試圖在每次按F1鍵時切換布爾值。 在我的主類我已經得到了被稱爲60次,第二次更新的方法和我的編碼是這樣的:Toggle Key in 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; 
} 

現在返回我想要的價值,感謝的人,我完全忘了這一點。 有沒有更好/更簡單的方法來做到這一點?