我正在使用像这样的键绑定,例如底部箭头键:
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秒钟添加一个新的队列,但是我该怎么做呢?还是有更好的方法来添加步行系统?
答案 0 :(得分:1)
不要使用KeyListener。 Swing旨在与Key Bindings
一起使用。
我想添加一个计时器,
是的,您应该使用计时器,这样您就不依赖于操作系统密钥重复率。
有关更多信息,请参阅Motion With the Keyboard以及使用键绑定和计时器的示例。
答案 1 :(得分:0)
编辑:无需解释何时已有解释。 Check this thread.