keyboard - ¿Cómo escuchar presionar la tecla repetidamente en Dart para los juegos?
keypress (1)
En primer lugar, no escuche los eventos de keyPress
, porque la "demora inicial" depende de la configuración del sistema operativo. De hecho, los eventos de keyPress
pueden incluso no disparar repetitivamente.
Lo que debe hacer es escuchar los eventos keyDown
y keyUp
. Puedes hacer una ayuda para esto.
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);
}
Luego, dependiendo de lo que hagas en tu juego, es probable que tengas un "bucle de juego" de algún tipo, en tu método update()
que se llama de vez en cuando:
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);
}
}
Ahora su bucle de juego verifica repetitivamente para presionar A
tecla.
Sé que puedes escuchar los eventos de pulsación de tecla y tecla con Dart como:
var el = query(''#el'');
el.on.keyDown.add((e) {});
Pero el problema aquí es que solo se dispara una vez . Quiero repetición.
Por lo tanto, probé keyPress
en keyPress
lugar, pero tiene un ligero retraso antes de la repetición. Estoy trabajando en un juego y quiero que se active de forma instantánea y repetitiva.