2012-12-06 16 views
10

Tôi biết rằng bạn có thể nghe và nhấn phím xuống các sự kiện với Dart như:Làm thế nào để nghe bấm phím lặp đi lặp lại trong Dart cho trò chơi?

var el = query('#el'); 
el.on.keyDown.add((e) {}); 

Nhưng vấn đề ở đây là nó bắn chỉ lần. Tôi muốn lặp lại.

Vì vậy, tôi đã thử keyPress thay vào đó, nhưng nó có một chút chậm trễ trước khi lặp lại. Tôi đang làm việc trên một trò chơi và tôi muốn nó bắn ngay lập tức và lặp đi lặp lại.

Trả lời

24

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 keyDownkeyUp. 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.

+0

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 :) –

+0

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

+0

@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