「初期遅延」はオペレーティングシステムの設定によって異なるため、最初にkeyPress
イベントを聞かないでください!事実、keyPress
イベントは繰り返し発生することはありません。
あなたがする必要があるのは、keyDown
とkeyUp
イベントを聞くことです。あなたはこれの助けをすることができます。
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);
}
}
:
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()
方法では、ある種の「ゲームループ」を持っています今度は、あなたのゲームループがA
キーを押して繰り返し確認します。
ゲームのループの後、すべてのキーボード・プレスをクリアしたい場合があります。こちらをご覧くださいhttps://github.com/sethladd/bad-aliens-dart私は今更新する必要があると思います:) –
私はDartのゲームのキーボード操作に関する記事を書いています:http://dartgamedevs.org/blog/2012/12/11/keyboard-input/ – Cutch
@Cutchリンクが無効です。おそらくこれは:https://github.com/dartgamedevs/dartgamedevs.org/blob/master/source/_posts/2012-12-11-keyboard-input.markdown – Amsakanna