我知道您可以使用 Dart 收听按键和按下事件,例如:
var el = query('#el');
el.on.keyDown.add((e) {});
但这里的问题是它只触发 一次 .我要重复。
所以,我尝试了
keyPress
相反,但在重复之前它有一个轻微的延迟。我正在开发一款游戏,我希望它立即和重复地触发。
最佳答案
首先不要听keyPress
事件,因为“初始延迟”取决于操作系统配置!事实上,keyPress
事件甚至可能不会重复触发。
您需要做的是听keyDown
和 keyUp
事件。你可以为此做一个 helper 。
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
按键。
关于keyboard - 如何在 Dart 游戏中重复听按键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13746105/