我正在开发一个Java 2D游戏,其中我使用了KeyListener,但你可能猜到,它有焦点问题,主要是当播放器运行并且长按相同的键时,例如按下" W"为了向前奔跑,但是经过几秒钟的持续按下W后,KeyListener就会死掉并且没有按键工作,我想使用KeyBindings,因为大多数人建议将其用于游戏开发,但是我找不到任何有用的教程,大多数都使用某种形式对于我的游戏中的按钮和其他无用的功能,我怎样才能避免KeyListener失去焦点,或者如何编写一个简单的KeyBinding代码,只移动玩家,以及游戏中使用的其他简单内容。
这是我想要的那种键绑定,我知道它不起作用,这是一个例子:
component.getInputMap().put(KeyStroke.getKeyStroke(VK_W),
"move forward")
component.getActionMap().put("released",
releasedAction);
if(releasedAction == true){
Player.playerSpeedY = 7;
} else{
Player.playerSpeedY = 0;
}
FWI:这是当前的KeyListener代码:
if(HUD.PlayerHealth > 0){
if(key == KeyEvent.VK_W) {Player.playerSpeedY = -5; keyDown[0]= true;}
if(key == KeyEvent.VK_S) {Player.playerSpeedY = 5; keyDown [1]= true;}
if(key == KeyEvent.VK_A) {Player.playerSpeedX = -5; keyDown [2]= true;}
if(key == KeyEvent.VK_D) {Player.playerSpeedX = 5; keyDown [3]= true;}
}
我一直在寻找动作和输入地图教程,或者KeyBinding教程,我只是找不到任何有用的东西,另一个面团,行动中的组件和输入地图,它的用途是什么?,我的整个代码应该是什么?基于那个,有没有办法让动作地图移动玩家,只有那个?
答案 0 :(得分:0)
尝试这样的事情:
this.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_D, 0, false), "right");
this.getActionMap().put("right", new AbstractAction() {
public void actionPerformed(ActionEvent e) {
//Do Something Here
Player.playerSpeedX = 5;
}
});