2012-12-06 16 views
10

Ich weiß, dass Sie Taste drücken und nach unten Ereignisse mit Dart wie hören:Wie man Tasten wiederholt in Dart für Spiele drücken?

var el = query('#el'); 
el.on.keyDown.add((e) {}); 

Aber das Problem hier ist, dass es nur einmal abfeuert. Ich will Wiederholung.

Also habe ich versucht keyPress statt, aber es hat eine leichte Verzögerung vor der Wiederholung. Ich arbeite an einem Spiel und möchte, dass es sofort und wiederholt ausgelöst wird.

Antwort

24

Zunächst einmal nicht auf keyPress Ereignisse hören, da die "anfängliche Verzögerung" von der Betriebssystemkonfiguration abhängt! In der Tat können keyPress Ereignisse nicht sogar wiederholt auslösen.

Was Sie tun müssen, ist auf keyDown und keyUp Ereignisse zu hören. Sie können einen Helfer dafür machen.

class Keyboard { 
    HashMap<int, int> _keys = new HashMap<int, int>(); 

    Keyboard() { 
    window.onKeyDown.listen((KeyboardEvent e) { 
     // If the key is not set yet, set it with a timestamp. 
     if (!_keys.containsKey(e.keyCode)) 
     _keys[e.keyCode] = e.timeStamp; 
    }); 

    window.onKeyUp.listen((KeyboardEvent e) { 
     _keys.remove(e.keyCode); 
    }); 
    } 

    /** 
    * Check if the given key code is pressed. You should use the [KeyCode] class. 
    */ 
    isPressed(int keyCode) => _keys.containsKey(keyCode); 
} 

dann je nachdem, was Sie in Ihrem Spiel zu tun, haben Sie wahrscheinlich „eine Spielschleife“ von einer Art, in Ihrer update() Methode, die in jedem einmal in einer Weile aufgerufen wird:

class Game { 
    Keyboard keyboard; 

    Game() { 
    keyboard = new Keyboard(); 

    window.requestAnimationFrame(update); 
    } 

    update(e) { 
    if (keyboard.isPressed(KeyCode.A)) 
     print('A is pressed!'); 

    window.requestAnimationFrame(update); 
    } 
} 

Jetzt überprüft Ihre Spielschleife wiederholt nach Drücken der Taste A.

+0

Sie möchten vielleicht alle Tastatureingaben nach der Spielschleife löschen. Siehe auch https://github.com/sethladd/bad-aliens-dart was ich jetzt realisiere muss ich wohl noch updaten :) –

+0

Ich habe einen Artikel über Tastaturbedienung für Spiele in Dart geschrieben: http://dartgamedevs.org/blog/2012/12/11/keyboard-input/ – Cutch

+0

@Cutch der Link ist tot. Wahrscheinlich das: https://github.com/dartgamedevs/dartgamedevs.org/blob/master/source/_posts/2012-12-11-keyboard-input.markdown – Amsakanna