2014-02-15 5 views
0

Я использую keybinds, как это, например, нижнюю клавишу со стрелкой: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 секунд, а затем продолжает повторяться. Я пытаюсь сделать гладкую ходьбу для своей игры.

В моей игре нет бега, только пешком, но я не уверен, как бы я это сделал.

Я могу добавить ходячую очередь, чтобы она добавила, какое направление было запрошено &, затем цикл, который проходит через ходовые очереди и делает это, но когда ключи начнут повторять каждую миллисекунду или что-то idk задержка повторения после основной задержки, он добавит так много ходячих очередей, которые вы знаете, мой персонаж будет так далеко. Я думал о добавлении таймера, поэтому он может добавлять новую очередь каждые 1 секунду или что-то в этом роде, но как мне это сделать? или есть лучший способ добавить систему ходьбы?

ответ

1

Не используйте KeyListener. Swing был разработан для использования с Key Bindings.

Я думал о добавлении таймера

Да, вы должны использовать таймер, так что вы не зависит от ОС ключа скорость повтора.

См. Motion With the Keyboard для получения дополнительной информации и примера, который использует привязки клавиш и таймер.

Смежные вопросы