1

我正在尝试创建坦克游戏,但仍在学习如何用 Java 进行图形编程。我最初尝试使用 KeyListeners 移动两个图像之一(哪个取决于哪个播放器)。有人告诉我,键绑定可能是解决此问题的更有效方法。这是我的一些代码:

    public class FrameMain extends JFrame{
    ...
        public FrameMain(){

           this.addBindings();

addBindings() 方法:

    protected void addBindings() {
       InputMap inputMap = pnlPlay.getInputMap();       

       KeyStroke key = KeyStroke.getKeyStroke(KeyEvent.VK_RIGHT, Event.KEY_PRESS);
       inputMap.put(key, pnlPlay.pnlGame.MoveTank(2, pnlPlay.nPlayer));

       key = KeyStroke.getKeyStroke(KeyEvent.VK_LEFT, Event.KEY_PRESS);   
       inputMap.put(key, pnlPlay.pnlGame.MoveTank(-2, pnlPlay.nPlayer));
}

移动坦克方法:

    public int MoveTank(int xChange, int nPlayer){

       System.out.println("move "+nPlayer);

       if(nPlayer==0){
           tank1.x+=xChange;
       }else tank2.x+=xChange;

       repaint();
       return 1;
}

我遇到的问题是,当我按下右箭头键或左箭头键时,我没有得到任何响应。它应该打印“move #”,但事实并非如此。如果有人知道我做错了什么,或者可以指出一些做同样事情的代码的方向,我将不胜感激。我最好从按工作顺序查看代码然后玩弄它来学习。

4

1 回答 1

2

这段代码有两件事:

  • 我没有看到有关行动图的任何信息。输入映射将键映射到动作标识符,动作映射是标识符和实际动作之间的链接。所以你通常有类似的代码

    InputMap inputMap = component.getInputMap( );
    ActionMap actionMap =  component.getActionMap();
    Action actionToTrigger = ...;
    actionMap.put( "myAction", actionToTrigger );
    inputMap.put( key, "myAction" );
    
  • 如果使用正确的标识符将您的操作放入操作映射中,但仍然无法正常工作,则您可能使用了错误的输入映射。Swing 键绑定指南中解释了 3 种不同的输入映射。和其他人一起尝试

也许您应该再次查阅Swing 键绑定教程,因为它更详细地解释了所有这些 + 包含代码示例

于 2012-04-30T21:18:50.917 回答