AS3で連番オブジェクトを繰り返し処理で、一気にイベント設定

()
すごく便利な文法なのに、
意外と本に書いてなかったりして(ただ気づいてないだけかも)、ちょくちょく正しい書き方を度忘れするのでメモ。


【起こりえる状況例】

何か情報をカテゴリー分けして表示する時
そのカテゴリーの数だけ、ボタンが必要になります。
当然マウスイベントもその数だけ設定が必要になります。


1個1個丁寧にインスタンス名つけるのもいいけど、それで1個1個丁寧にマウスイベント設定してたら、ソースが冗長になって、エラー発生率を高めてしまいますね。


なので、cat1,cat2,cat3なんていう風に、インスタンス名を同じ名前にして、連番号で識別するようにすると繰り返し処理がなんかできそう。


そのときの書き方。
例えば10個のカテゴリーがある場合。(すでにボタンがステージに配置されているという前提で)


for (var i:uint = 1; i < 10; i++) {
	var mc:MovieClip = MovieClip(this["cat"+i]);
	mc.buttonMode = true;
	mc.addEventListener(MouseEvent.CLICK, onCatClickHandler);
	mc.addEventListener(MouseEvent.MOUSE_OVER, onCatOverHandler);
	mc.addEventListener(MouseEvent.MOUSE_OUT, onCatOutHandler);
}


これで一気にステージに配置された10個のボタンに対してイベントリスナーの設定ができます。


肝は

MovieClip(this["cat"+i]);

の部分。ステージ上の同名連番MCをこれで拾える。



注意するのは、ドキュメントクラスの場合は、

var mc:MovieClip = MovieClip(root["cat"+i]);


カスタムクラスの場合は

var mc:MovieClip = MovieClip(this["cat"+i]);


で、場所を記すこと。

thisは取っちゃうとエラーになった。強制型変換ができませんっていうエラー。

戦意

© 2012 戦意