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
.
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 :) –
Ich habe einen Artikel über Tastaturbedienung für Spiele in Dart geschrieben: http://dartgamedevs.org/blog/2012/12/11/keyboard-input/ – Cutch
@Cutch der Link ist tot. Wahrscheinlich das: https://github.com/dartgamedevs/dartgamedevs.org/blob/master/source/_posts/2012-12-11-keyboard-input.markdown – Amsakanna