前のページはこちら

円を作る

先ほど作ったゲームに、「CircleMan」という新しい生命を誕生させてみます。見た目は単純な円ですが、立派なキャラクターです。

libフォルダcircle_man.dartを作成します。コードは次の通りです。

import 'package:flame/components.dart';

class CircleMan extends CircleComponent {
  CircleMan() : super(radius: 20.0);

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

  @override
  void update(double dt) {
    super.update(dt);
    position.x = position.x + 1;
    position.y = position.y + 1;
  }
}

今度はCircleComponentを継承しています。これは単純な円の役割を与えるコンポーネントです。また、これを継承するためにcomponents.dartパッケージをインポートしています。

円は単純な生成方法として、superで親クラスのradius(半径)の数値を与える事で生成時に指定した半径の白い円が誕生します。

yourworldと同じく、こちらもonLoadupdateのライフサイクルメソッドがあります。updateの中で、自身の位置情報であるpositionのメンバ変数xとyに1ずつ加算を行っています。

ゲームに円を登録する

your_game.dartに先ほどのサークルマンを追加します。

ヘッダ追加

ヘッダに先ほどのcircle_man.dartのファイルをインポートさせます。

import 'circle_man.dart';

YourGameクラスのonLoadで円を追加する

YoreGameクラスのonLoadメソッドを下記のように書き換ます

下2行が追加されたコードで、

  • 先ほど作成したCircleManクラスのインスタンス_circleManを生成
  • それをaddでYourGameクラス自身に追加している

を行っています。

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

実行

実行するとゲームが生まれた時に左上に円が出現し、ゆっくりと右下移動していきます。この仕組みとしては下記となります。

  • YourGameonLoadCircleManクラスのオブジェクト_circleManを追加した
  • CircleManクラス自体がupdateで右下(x+1,y+1)に位置を加算させ、移動している

ちなみにYourGameクラスのupdateの方に間違ってaddの処理を書くとこのよう円が生成され続けます。