Trước hết, đừng nghe keyPress
sự kiện, vì "độ trễ ban đầu" phụ thuộc vào cấu hình hệ điều hành! Trong thực tế, keyPress
sự kiện thậm chí không thể kích hoạt lặp lại.
Điều bạn cần làm là nghe các sự kiện keyDown
và keyUp
. Bạn có thể làm người trợ giúp cho việc này.
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);
}
Sau đó, tùy thuộc vào những gì bạn làm trong trò chơi của bạn, bạn có thể có "một vòng lặp trò chơi" của một số loại, trong phương pháp của bạn update()
đó được gọi là trong mỗi một lần trong một thời gian:
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);
}
}
Giờ đây, vòng lặp trò chơi của bạn sẽ kiểm tra lặp lại để nhấn phím A
.
Nguồn
2012-12-06 15:03:52
Bạn có thể muốn xóa tất cả các lần nhấn bàn phím sau vòng lặp trò chơi. Xem thêm https://github.com/sethladd/bad-aliens-dart mà tôi nhận ra bây giờ tôi có thể cần phải cập nhật :) –
Tôi đã viết một bài viết về xử lý bàn phím cho các trò chơi trong Dart: http://dartgamedevs.org/blog/2012/12/11/keyboard-input/ – Cutch
@Gán liên kết đã chết. Có lẽ điều này: https://github.com/dartgamedevs/dartgamedevs.org/blob/master/source/_posts/2012-12-11-keyboard-input.markdown – Amsakanna