次のような Dart を使用して、キーの押下とダウンのイベントをリッスンできることを知っています。
var el = query('#el');
el.on.keyDown.add((e) {});
しかし、ここでの問題は、一度しか発火しないことです。リピートしたいです。
keyPress
ということで、代わりにやってみましたが、繰り返しの前に少し遅れがあります。私はゲームに取り組んでおり、即座に繰り返し起動したいと考えています。
まず第一に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
これで、ゲーム ループはキーの押下を繰り返しチェックします。