使用键绑定来移动图像

时间:2012-04-30 21:08:34

标签: java swing key-bindings

我正在尝试创建坦克游戏,但我仍在学习如何用Java进行图形编程。我最初尝试使用KeyListeners移动两个图像中的一个(哪一个取决于哪个玩家要去)。我被告知Key Bindings可能是一种更有效的方法。以下是我的一些代码:

    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));
}

MoveTank方法:

    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;
}

我遇到的问题是,当我按向右或向左箭头键时,我没有得到任何回应。它应该是打印“移动#”,但事实并非如此。如果有人知道我做错了什么或者可以指向一些做同样事情的代码,我会很感激。我通过查看正常工作的代码然后再使用它来学习。

1 个答案:

答案 0 :(得分:2)

此代码有两件事:

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

    这样的代码
    InputMap inputMap = component.getInputMap( );
    ActionMap actionMap =  component.getActionMap();
    Action actionToTrigger = ...;
    actionMap.put( "myAction", actionToTrigger );
    inputMap.put( key, "myAction" );
    
  • 如果将操作放在具有正确标识符的操作映射中,但仍然无效,则可能使用了错误的输入映射。有3种不同的输入映射,如Swing键绑定指南中所述。试试其他人

也许你应该再次咨询Swing keybindings tutorial,因为它更详细地解释了这一切+包含代码示例