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の理解度不足は一部しかたないにしても、
もう少し文章をきれいに書けるようになりたいなと思いました。