keyboard - 如何在 Dart 游戏中重复听按键?

标签 keyboard dart keypress

我知道您可以使用 Dart 收听按键和按下事件,例如:

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

但这里的问题是它只触发 一次 .我要重复。

所以,我尝试了 keyPress相反,但在重复之前它有一个轻微的延迟。我正在开发一款游戏,我希望它立即和重复地触发。

最佳答案

首先不要听keyPress事件,因为“初始延迟”取决于操作系统配置!事实上,keyPress事件甚至可能不会重复触发。

您需要做的是听keyDownkeyUp事件。你可以为此做一个 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/

相关文章:

json - 如何访问我从 Flutter 中的 HTTP POST 请求获得的 JSON 响应?

macos - 检测 OS X 上的任何按键,包括修饰键

c++ - 模拟左键点击时黑屏

jQuery:触发(mousemove 或 "keypressed")

java - 为 Android 键盘动态应用主题

android - 是否可以在 native react 中开发移动键盘应用程序

dart - JsonObject打破了新的Dart库?

macos - 如何通过德语 Mac 键盘使用 IntelliJ Idea 的某些键盘映射

iphone - UI键盘类型

dart - dart 中 Paper 元素的实例