Ответ 1
Прежде всего, не слушайте события keyPress
, потому что "начальная задержка" зависит от конфигурации операционной системы! Фактически события keyPress
могут даже не срабатывать повторно.
Что вам нужно сделать, это прослушать события keyDown
и keyUp
. Вы можете сделать для этого помощником.
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);
}
Затем, в зависимости от того, что вы делаете в своей игре, у вас, вероятно, есть "игровой цикл" какого-то типа в вашем методе update()
, который вызывается каждый раз через некоторое время:
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);
}
}
Теперь ваш игровой цикл повторяется для нажатия клавиши A
.