前回は「ゲームが生まれた」と「ゲームが動いている」というメッセージが出ました。先ほどのコードで何が起こっているのでしょうか。ポイントは3点です。「FrameGameクラス」「onLoad」「update」この3つを説明します。

ライフサイクル

まず、YourGameクラスはFlameGameクラスを継承しています。

class YourGame extends FlameGame {

そしてこの継承によって、そのクラスで作られたオブジェクトにはライフサイクルに関連したメソッドが発生します。

ライフサイクルとは、そのオブジェクトの生成に始まり、破棄に終わる一生を指します。

「生成された時」「生きている時」「描画状況が変わった時」「破棄された時」など、そのオブジェクトが取り巻く環境が変わった時に対してメソッドが用意され、これをオーバーライドする事でタイミングに応じた処理を実現していきます。

今回は下記の2つのメソッドをオーバーライドして使用しました。

onLoad

ライフサイクルの中で「生成された時」呼び出されるメソッドです。先ほどはこれをオーバーライドしていました。

  @override
  Future<void> onLoad() async {
    print("ゲームが生まれた");
  }

update

もう一つオーバーライドしたupdate。これは言わば「生きている時」です。常にループして実行されています。

先頭でグローバル変数worldCountが宣言されており、それをループ毎に1ずつ増やして表示されていました。

  @override
  void update(double dt) {
    super.update(dt);
    worldCount++;
    print("ゲームが動いている$worldCount");
  }

このように、ライフサイクルのメソッドをオーバーライドする事で、そのオブジェクトの挙動を作り上げています。

他のライフサイクルメソッド

様々なライフサイクルメソッドがあります。

  • onMount
  • render
  • onRemove
  • onGameResize

例えば、「onRemove」は削除された時に呼ばれるメソッドです。今回は使いませんでしたが、今後必要になってくるものも多いと思います。

FlameGame以外でも

FlameGameクラスに限らず、描画された図形や、スプライトのキャラクターなども同じライフサイクルを持ちます。このライフサイクルの概念が、Flameを使ったゲーム作りの役にたちます。

次のページはこちら