怎么听按键重复在飞镖游戏?(How to listen to key press repetitiv

2019-07-04 15:42发布

我知道,你可以听按键和向下飞镖样事件:

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

但这里的问题是,它触发一次 。 我想重复。

所以,我想keyPress代替,但它具有重复之前稍有延迟。 我工作的一个游戏,我希望它立即和重复射击。

Answer 1:

首先,不听keyPress事件,因为“初始延迟”依赖于操作系统的配置! 事实上, keyPress事件甚至可能不会重复闪光。

你需要做的是要听keyDownkeyUp事件。 您可以弥补这方面的辅助工具。

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按键。



文章来源: How to listen to key press repetitively in Dart for games?