我遇到了问题,我希望我可以很好地向你们描述。
我正在制作这个游戏
像所有游戏一样,我在线程中有这个更新方法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与游戏在同一个线程中吗?如果是这样的话?