前のページはこちら
今回は、オブジェクトを消すremoveメソッドと、自身が消去される時のライフサイクルメソッドであるonRemoveを見てみます。
ソースコードの変更
circle_man.dartとyour_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で親のradiusとpositionに対し値を渡しています。(今までは半径だけでしたが、初期位置なども渡せます)
@override
void onRemove() {
print("消えろと言われた…");
}これが破棄時に呼ばれるonRemoveメソッドです。
YourGame
updateメソッドでカウンタを1ずつ増やし、100になった時にCircleManを生成、それをクラスの変数_circleManに代入して保存しています(_circleManはupdateメソッド外で宣言されています)。
更にカウンタが200になった時removeメソッドで保存した_circleManを消しています。
実行
実行して少しすると円が出現し、さらに待つと消えます。円が消えたタイミングでログが出現します。

次のページはこちら