我需要设计一个有两个玩家的游戏。每个都有一个球,应该能够向右或向左移动球,第一个玩家带有'a''d'按钮,第二个玩家有右箭头按钮。然而,目前一名球员需要等待其他球员的动作完成才能移动他们自己的球。我该如何解决这个问题?以下是我的代码的相关部分:
public class AnimationWindow extends JPanel{
public AnimationWindow()
{
super();
....
....
cezmiMover();
}
public void cezmiMover(){
this.getInputMap().put(KeyStroke.getKeyStroke('a'), "left1");
this.getActionMap().put("left1", new AbstractAction() {
public void actionPerformed(ActionEvent e) {
board.cezmi1.moveLeft();
}
});
this.getInputMap().put(KeyStroke.getKeyStroke('d'), "right1");
this.getActionMap().put("right1", new AbstractAction() {
public void actionPerformed(ActionEvent e) {
board.cezmi1.moveRight();
}
});
this.getInputMap().put(KeyStroke.getKeyStroke("LEFT"), "left2");
this.getActionMap().put("left2", new AbstractAction() {
public void actionPerformed(ActionEvent e) {
board.cezmi2.moveLeft();
}
});
this.getInputMap().put(KeyStroke.getKeyStroke("RIGHT"), "right2");
this.getActionMap().put("right2", new AbstractAction() {
public void actionPerformed(ActionEvent e) {
board.cezmi2.moveRight();
}
});
}
}
答案 0 :(得分:7)
您需要使用一系列标志和某种“更新”循环来根据标志的状态更新游戏状态...
例如,首先创建一系列标志......
private boolean p1Left, p1Right, p2Left, p2Right = false;
这些可以通过单个玩家对象轻松维护,但是你没有提供那么多代码......
接下来,您需要监控按键和按键释放事件,并根据需要设置标志的状态...
this.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_D, 0, false), "right1down");
this.getActionMap().put("right1down", new AbstractAction() {
public void actionPerformed(ActionEvent e) {
p1Right = true;
}
});
this.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_D, 0, true), "right1up");
this.getActionMap().put("right1up", new AbstractAction() {
public void actionPerformed(ActionEvent e) {
p1Right = false;
}
});
然后你需要一些可以更新游戏状态的循环或计时器。就个人而言,我喜欢使用javax.swing.Timer
,但那只是我。
在每次运行更新循环时,您需要检查每个标志的状态并相应地更新对象...
if (p1Right) {
board.cezmi1.moveRight();
}
答案 1 :(得分:3)
结帐Motion Using the Keyboard。 KeyboardAnimation.java
代码包含一个完整的工作示例,演示了执行此操作的一种方法。
KeyboardAnimation类的每个实例: