読者です 読者をやめる 読者になる 読者になる

Flash制作講座フラッシュ制作講習

FLASH制作からActionScriptによるFlashコンテンツ制作のためのフラッシュ制作講座

AS3.0リンケージ深度やレイヤー階層

ActionScript3.0はAS2.0と違ってdepth(デプス)を使用しません。



リンケージからのaddChildでインスタンスを追加した場合、後から追加したリンケージ(クラス)が上の深度(インデックス)に位置します。


深度(インデックス)のルールは、0から始まり、同一レイヤーでmcを追加するたびに1づつ増えていきます。


addChild(mc1); // 深度(インデックス)0
addChild(mc2); // 深度(インデックス)1
addChild(mc3); // 深度(インデックス)2

深度を指定するには、addChildAt(mc1,0);を使用し、深度を参照するにはgetChildIndex(mc1);で深度が取得できます。



しかも深度の指定については必ず0を起点として隣接している必要があるようです。

インデックスのエラー

『指定したインデックスが境界外です』 

がパブリッシュ時に出る場合は、主に深度の指定があっていない場合です。

AS3.0での深度と重なり順のコントロールですが、


addChildAt(ms,2)とした場合、『指定したインデックスが境界外です』でエラーがでます。

これはAS3.0でのインデックス制御の仕様で、基本を0として、addChildするたび自動的に1づつ加算され、深度が重なりあっていないとエラーがでるのですね。

numChildrenクラスでは、階層が持つインスタンスの総数を取得します。
swapChildrenクラスでは、重なり順を入れ替えることができます。

【記述例】



trace(stage.numChildren);//stage上のインスタンスの総数を取得
stage.swapChildren(mcA,mcB);//stage上のmcAとmcBの深度(レイヤー)を入れ替える


インスタンスを削除する場合は、

removeChild(インスタンス名);
removeChildAt(深度);

で指定して削除をします。