KeyListener和游戏线程

时间:2016-10-13 15:16:01

标签: java multithreading enums keyboard

我遇到了问题,我希望我可以很好地向你们描述。

我正在制作这个游戏

像所有游戏一样,我在线程中有这个更新方法

update();

我也实现了一个关键的监听器;

现在是我的问题,我有一个ButtonState枚举:

enum ButtonState{down,up}

我有一个KeyboardState类:

KeyBoardState{
 public ButtonState A=ButtonState.up;
}

我有一个具有静态KeyboardState

的Keyboard类
KeyBoard{
    public static KeyboardState state=new KeyboardState();
}

在我的KeyListener中就像这样:

keyPressed(KeyEvent e){
if(e.getKeyCode()==KeyEvent.VK_A)KeyBoard.getKeyBoardState().W=ButtonState.down;
}

keyReleased(KeyEvent e){
if(e.getKeyCode()==KeyEvent.VK_A)KeyBoard.getKeyBoardState().W=ButtonState.up;
}

现在在我的更新代码中就像这样

KeyBoardState current=new KeyBoardState();
KeyBoardState old=new KeyboardState();

update(){

    current=Keyboard.state;
    //here both current and old become buttonstate.down when pressed and vice versa
    if(current.a==ButtonState.down && old.a==ButtonState.up){
     //do
    }
    old = current;
}

我的问题是这样,每当我按A时,current.a和old.a都会成为ButtonState.down,当我发布它时也是如此。所以代码永远不会去//做。

我可以说KeyListener与游戏在同一个线程中吗?如果是这样的话?

0 个答案:

没有答案