Java 2D游戏角色走路?

时间:2014-02-15 15:12:11

标签: java 2d

我正在使用像这样的键绑定,例如底部箭头键:

public class Bottom extends AbstractAction {

private GameScreen gameScreen;

public Bottom (GameScreen p) {      
    this.gameScreen = p;
    this.gameScreen.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(
            KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, 0), "Bottom");     
}

@Override
public void actionPerformed(ActionEvent e) {
    this.gameScreen.getMovement().moveDown();
}

}

然后我通过movement.java检测它们:

public class Movement {

    private Player player;

    public Movement(Player p) {
        this.player = p;
    }

    public void moveRight() {
    }

    public void moveLeft() {
    }

    public void moveUp() {
    }

    public void moveDown() {
    }

    public void jump() {
        this.player.jump();
    }
}

并在此处理:

public class Keybinds {

    private GameScreen panel;

    public Keybinds(GameScreen game) {
        this.panel = game;
        this.addKeybinds();
    }

    private void addKeybinds() {
        addKey("Bottom", new Bottom(this.panel));
        addKey("Space", new Space(this.panel));
    }

    private void addKey(String bind, AbstractAction a) {
        this.panel.getActionMap().put(bind, a);
    }

}

无论如何,默认情况下,操作系统有一个重复计时键,所以当我点击一个键时,它是1.3秒左右,然后继续重复。我正努力让自己的比赛顺利进行。

我的游戏没有跑步,只是走路,但我不知道我该怎么做。

我可以添加行走队列,以便添加请求的方向和然后循环遍历行走队列并执行它,但是当键将开始重复每毫秒或者在主延迟之后重复延迟时,它将添加如此多的行走队列,你知道,我的角色将到目前为止远。我想添加一个计时器,所以它可以每1秒钟添加一个新的队列,但是我该怎么做呢?还是有更好的方法来添加步行系统?

2 个答案:

答案 0 :(得分:1)

不要使用KeyListener。 Swing旨在与Key Bindings一起使用。

  

我想添加一个计时器,

是的,您应该使用计时器,这样您就不依赖于操作系统密钥重复率。

有关更多信息,请参阅Motion With the Keyboard以及使用键绑定和计时器的示例。

答案 1 :(得分:0)

编辑:无需解释何时已有解释。 Check this thread.