java - 关于 Java 中的键绑定(bind)

标签 java awt key-bindings

这里的人一直建议我在我的 Java 2D 游戏中使用 Key Bindings 而不是 Key Listener。

所以我学会了它,我想知道我是否正确理解如何使用它。

假设我有一个游戏,有两个游戏,每个玩家可以按 5 个按钮。

玩家 1:

  • UP 箭头 - 向前移动
  • LEFT 箭头 - 改变运动角度
  • RIGHT 箭头 - 改变运动角度
  • SPACE 键 - 发射导弹
  • L 键 - 发射二级导弹

玩家 2:

  • W 键 - 前进
  • A 键 - 改变运动角度
  • D 键 - 改变运动角度
  • CAPS-LOCK 键 - 发射导弹
  • 'Z'键 - 发射二级导弹

如果我希望程序对每个不同的按键做出不同的 react ,那么我必须这样做:(?)

  1. 在内部创建 10 个扩展 AbstractAction 的新嵌套类 运行大部分游戏逻辑的类。
  2. 创建一个实例 这 10 个新类中的每一个,并将每个类绑定(bind)到一个键。

这是正确的吗?只为按下按钮创建 10 个新类真的合乎逻辑吗? 我想知道我是否正确理解如何使用键绑定(bind),以便我可以开始使用它进行编程。

谢谢

最佳答案

"Is this correct? Is it really logical to create 10 new classes only for pushing buttons?"

答案是肯定的。您确实需要创建 10 个不同的实例。这并不难。您可以创建一个帮助程序类,也可以只复制并粘贴类似这样的内容

Action leftAction = new AbstractAction(){
    public void actionPerformed(ActionEvent e){
        // do something when left button pressed;
    }
};

InputMap inputMap = panel.getInputMap(JPanel.WHEN_IN_FOCUSED_WINDOW);
ActionMap actionMap = panel.getActionMap();

inputMap.put(KeyStroke.getKeyStroke("LEFT"), "leftAction");
actionMap.put("leftAction", leftAction);  <----

对于每个不同的 Action ,只需复制并粘贴Action 代码,更改变量和要执行的 Action ,然后输入到InputMap ActionMap 相应地。

我针对不同的场景使用这两种方式。对于图形,我更喜欢上面的方式。对于菜单之类的东西,我倾向于使用一个单独的类

看看this example

关于java - 关于 Java 中的键绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20883737/

相关文章:

java - 一个变量的多个字符串输入

java - Thymeleaf 页面布局问题

java - 实现图形用户界面

java - "bubble clusters"项目(可拖动性、分组、绘图、合并组)

java - 在 Java 中使用键绑定(bind)和操作映射作为按钮的快捷键

Eclipse RCP : Key binding for commands work, 但菜单中未显示快捷方式

Java 2D 游戏 : The game loop

java - jarsigner:此 jar 包含未验证证书链的条目

java - 我有一个代码。它工作正常,直到我在其中添加了一个额外的方法

javax.servlet.ServletException : ICEfaces requires the PersistentFacesServlet