如何编写KeyBindings

时间:2017-01-15 18:46:24

标签: user-interface keyboard game-physics keylistener

我正在开发一个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教程,我只是找不到任何有用的东西,另一个面团,行动中的组件和输入地图,它的用途是什么?,我的整个代码应该是什么?基于那个,有没有办法让动作地图移动玩家,只有那个?

1 个答案:

答案 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;

    }
  });

How to use KeyBindings