2013-05-20 63 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; 
} 

现在返回我想要的价值,感谢的人,我完全忘了这一点。 有没有更好/更简单的方法来做到这一点?