2012-12-06 12 views
10

は、私はあなたのようにキーを押しにし、ダートでのイベントダウン聞くことができることを知っている:ダーツゲームでキープレスを繰り返し聞くにはどうすればいいですか?

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

しかし、ここで問題は、それが唯一の一度に発射するということです。私は繰り返したい。

代わりに、私はkeyPressを試しましたが、繰り返しの前に若干の遅延があります。私はゲームに取り組んでいます。私はそれを即座に繰り返していきたいと思います。

答えて

24

「初期遅延」はオペレーティングシステムの設定によって異なるため、最初にkeyPressイベントを聞かないでください!事実、keyPressイベントは繰り返し発生することはありません。

あなたがする必要があるのは、keyDownkeyUpイベントを聞くことです。あなたはこれの助けをすることができます。

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キーを押して繰り返し確認します。

+0

ゲームのループの後、すべてのキーボード・プレスをクリアしたい場合があります。こちらをご覧くださいhttps://github.com/sethladd/bad-aliens-dart私は今更新する必要があると思います:) –

+0

私はDartのゲームのキーボード操作に関する記事を書いています:http://dartgamedevs.org/blog/2012/12/11/keyboard-input/ – Cutch

+0

@Cutchリンクが無効です。おそらくこれは:https://github.com/dartgamedevs/dartgamedevs.org/blob/master/source/_posts/2012-12-11-keyboard-input.markdown – Amsakanna

関連する問題