【问题标题】:How to write KeyBindings如何编写键绑定
【发布时间】:2017-05-30 14:44:39
【问题描述】:

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

【问题讨论】:

    标签: user-interface keyboard game-physics keylistener


    【解决方案1】:

    试试这样的:

      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

    【讨论】:

      猜你喜欢
      • 2013-06-16
      • 2023-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多