タイマー

2023-09-08

TimerComponent

TimerComponent を使うと、一定時間ごとに処理を繰り返したり、一定時間後に処理を実行したりできます。

公式ドキュメント https://docs.flame-engine.org/latest/flame/other/util.html#timer
APIリファレンス https://pub.dev/documentation/flame/latest/components/TimerComponent-class.html

Flutter 標準機能との違い

Timer.periodicFuture.delayedと同じ機能に見えますが、違いがあります。 内部実装を見ると、Flame のライフサイクルに合わせて処理されるようになっているので、ポーズの際に止まるなどのメリットがあります。 基本的にはこちらを使う方がよいでしょう。

内部実装 https://github.com/flame-engine/flame/blob/v1.14.0/packages/flame/lib/src/components/timer_component.dart
内部実装 https://github.com/flame-engine/flame/blob/v1.14.0/packages/flame/lib/src/timer.dart

動かす

TimerComponentを使ってみます。 秒数をperiodに、処理をonTickにしています。

まずは繰り返しです。ここでは 1 秒ごとにカウントアップしています。 繰り返すにはrepeat: trueを指定します。

    await add(
      TimerComponent(
        period: 1.0,
        repeat: true,
        onTick: () => _count++,
      ),
    );

次に一定時間後に一度だけ処理します。ここではボタンをランダムに動かして、0.5 秒後に停止しています。 この場合はrepeat: trueは不要です。 処理し終わったらもう不要になるので removeOnFinish: trueを指定する方がよいでしょう。

  _onPressed() {
    _vx = (_random.nextBool() ? 1 : -1) * 50;
    _vy = (_random.nextBool() ? 1 : -1) * 50;

    add(
      TimerComponent(
        period: 0.5,
        onTick: () {
          _vx = 0;
          _vy = 0;
        },
        removeOnFinish: true,
      ),
    );
  }

このようにしてタイマーが使えます。

© 2023 tnantoka