書き物

技術とか作った物の話とか愚痴文句感想など

Myタスクシステムレポート6

前回の続きです。

本日で最終回です。


ではさっそく「Ballタスク」を見てみましょう。


Ball.as

例のごとくTaskクラスを継承しています。


コンストラクタでは、BallFactoryクラスから渡された_rootを引数として持っています。


いよいよムービークリップ(以下MC)を作り出します。

var num:Number = MovieClipFactory.createManyNumMc(stageMc, "aMC_ball", "ball", 1);
var ballMc:MovieClip = stageMc["ball" + num];

MovieClipFactoryクラスは、junkフォルダに入っています。

MCを作る上で便利かな?と思うメソッドを入れてあります。

タスクシステムとは直接関係ないので、どうなっているかはソースをご覧ください。

createManyNumMcメソッドは、MCを作るステージとなるMCと、

生成するライブラリ上のMCシンボルの識別子、

生成するMCのインスタンス名の基本名(今回の場合、ball1, ball2, ... という名前で生成)、

深度の基本を受け取り、

ステージ上にまだ存在していない名前のMCを生成し、

生成したMCの名前の番号となった数値を返します。

(当たり判定とかもとらないので、今回使う必要はなかったかも...;;)

コンストラクタ内の処理の残りは、それぞれの初期値の設定です。


superで処理関数にmoveBallが割り当てられているので、今後moveBallメソッドがループして処理されます。

全体的に見てみれば、シンプルな重力処理です。

大切な部分は、

if (ballMc._y > 400 + ballMc._height / 2)
{
setFunction(destructor);
}

です。

ボールが画面下より外に出たなら...という条件で、

処理関数にdestructor(デストラクタ)を割り当てています。

ではdestrucotrメソッドはどうなっているでしょう?

// ■デストラクタ
private function destructor():Void
{
_ballMc.removeMovieClip();
TaskList.removeTask(_id);
}

まず生成したMC(_ballMC)を削除していますね。

そして、例のタスクの除去を行っています。

つまりこのメソッドが実行されたとき、ボールタスクが終了するわけです。

(これって処理関数に割り当てなくても直接destructor()を実行してもいいのかな??)


ボールはボール自身である条件になると消えてくれるので、

BallFactoryタスクは安心して大量にボールを作りまくれます。

それぞれの役割がかなり明確化されているのでソースは見やすいです。



以上でタスクシステムの基本的な解説は終わりです。


あとがき

ざーっと解説してはみましたが、

ソースはグダグダだし、文はめちゃくちゃだし、

なんだか恥をさらしただけのような気もします。

このレポートがヒントとなるだろうか、いやならない。


ASの理解度不足は一部しかたないにしても、

もう少し文章をきれいに書けるようになりたいなと思いました。