キーボードリスナー

2023-07-15

KeyboardListenerComponent

以前 キーボードイベントではKeybaordEvents mixin を使ってキーボード入力を自分で処理しましたが、 単純にキーボード入力を処理するだけならKeyboardListenerComponentを使うと簡単にできます。

公式ドキュメント https://docs.flame-engine.org/latest/flame/inputs/keyboard_input.html#receive-keyboard-events-in-a-component-level
APIリファレンス https://pub.dev/documentation/flame/latest/components/KeyboardListenerComponent-class.html

動かす

ゲームクラスに HasKeyboardHandlerComponents mixin を指定します。

class KeyboardListenerGame extends FlameGame with HasKeyboardHandlerComponents {

次にKeyboardListenerComponentを使ってキーボード入力を処理します。 行数は多いですが、KeyDown/KeyUp 時の処理を単純に指定するだけなので簡単です。

    await add(
      KeyboardListenerComponent(
        keyDown: {
          LogicalKeyboardKey.arrowDown: (keysPressed) {
            _vy = _speed;
            return true;
          },
          LogicalKeyboardKey.arrowUp: (keysPressed) {
            _vy = -_speed;
            return true;
          },
          LogicalKeyboardKey.arrowRight: (keysPressed) {
            _vx = _speed;
            return true;
          },
          LogicalKeyboardKey.arrowLeft: (keysPressed) {
            _vx = -_speed;
            return true;
          },
        },
        keyUp: {
          LogicalKeyboardKey.arrowDown: (keysPressed) {
            _vy = 0;
            return true;
          },
          LogicalKeyboardKey.arrowUp: (keysPressed) {
            _vy = 0;
            return true;
          },
          LogicalKeyboardKey.arrowRight: (keysPressed) {
            _vx = 0;
            return true;
          },
          LogicalKeyboardKey.arrowLeft: (keysPressed) {
            _vx = 0;
            return true;
          },
        },
      ),
    );

これでキーボードイベントと同じようにキーボード入力を処理できるようになりました。

© 2023 tnantoka