前のページはこちら

今回は、オブジェクトを消すremoveメソッドと、自身が消去される時のライフサイクルメソッドであるonRemoveを見てみます。

ソースコードの変更

circle_man.dartyour_game.dartをそれぞれ下記のように書き換えます。

circle_man.dart

import 'package:flame/components.dart';

class CircleMan extends CircleComponent {
  CircleMan(
    double _radius, //受け取る引数・半径
    Vector2 _pos, //受け取る引数・初期位置
  ) : super(
          radius: _radius, //半径を親クラスに渡す
          position: _pos, //初期位置を親クラスに渡す
        );

  @override
  void onRemove() {
    print("消えろと言われた…");
  }
}

your_game.dart

import 'package:flame/game.dart';
import 'circle_man.dart';

class YourGame extends FlameGame {
  int worldCount = 0;
  late CircleMan _circleMan;

  @override
  void update(double dt) {
    super.update(dt);
    worldCount++;

    if (worldCount == 100) {
      _circleMan = CircleMan(20, Vector2(10.0, 30.0));
      add(_circleMan);
    }

    if (worldCount == 200) {
      remove(_circleMan);
    }
  }
}

変更のポイント

CircleMan

class CircleMan extends CircleComponent {
  CircleMan(
    double _radius, //受け取る引数・半径
    Vector2 _pos, //受け取る引数・初期位置
  ) : super(
          radius: _radius, //半径を親クラスに渡す
          position: _pos, //初期位置を親クラスに渡す
        );

コンストラクタで最初に半径_radiusと位置_posを受け取れるようにしました。そのままsuperで親のradiuspositionに対し値を渡しています。(今までは半径だけでしたが、初期位置なども渡せます)

  @override
  void onRemove() {
    print("消えろと言われた…");
  }

これが破棄時に呼ばれるonRemoveメソッドです。

YourGame

updateメソッドでカウンタを1ずつ増やし、100になった時にCircleManを生成、それをクラスの変数_circleManに代入して保存しています(_circleManupdateメソッド外で宣言されています)。

更にカウンタが200になった時removeメソッドで保存した_circleManを消しています。

実行

実行して少しすると円が出現し、さらに待つと消えます。円が消えたタイミングでログが出現します。

次のページはこちら