我正在尝试创建坦克游戏,但我仍在学习如何用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;
}
我遇到的问题是,当我按向右或向左箭头键时,我没有得到任何回应。它应该是打印“移动#”,但事实并非如此。如果有人知道我做错了什么或者可以指向一些做同样事情的代码,我会很感激。我通过查看正常工作的代码然后再使用它来学习。
答案 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,因为它更详细地解释了这一切+包含代码示例