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

然后我通过运动来检测它们.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 秒添加新队列或其他东西,但是我该怎么做呢?还是有更好的方法来添加步行系统?

不要使用 KeyListener。Swing 被设计为与 Key Bindings 一起使用。

我想添加一个计时器,

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

请参阅使用键盘的动作以获取更多信息以及使用键绑定和计时器的示例。

编辑:当已经有解释时,无需解释。检查此线程。

最新更新