http://blog.osi-ire.com/?cid=51595
深度入れ替え。_copy_mcが下に行く
_login_mc.swapChildren(_copy_mc , _login_mc.cover_mc);
ActionScript 2.0からActionScript 3.0に移行するにあたって覚えた事をメモしておきます。
as2において、重なり順を調整する為には、深度を使いました。
しかし、ActionScript 3.0 では表示リストに直接アクセスできるため、深度は別の方法で処理されます。
A,B,Cという三つのムービークリップが、下からA→B→Cの順でステージ上に存在した時、
AとCの重なり順を逆にしたい(C→B→Aにしたい)と思たとき、AS2では
A.swapDepths( C ); //AとBの深度を入れ替える
と書きました。
これをAS3で表現する場合は
stage.swapChildren(a , b); //AとBの深度を入れ替える
と書きます。
また表示順を直接指定したい場合。
仮に、深度がA=0,B=1,C=2とした場合
as2でCを一番奥に持っていくときは,
A.swapDepths( 3 ); //Aの深度を3に変更する
C.swapDepths( 0 ); //Cの深度を0に変更する
と書かないといけなかったところ
AS3では
setChildIndex(C, 0); //Cを表示リストの0に変更する
と書く事で、自動的に表示リストの数値が押し上げられ、Aを上書きする事無く、C→B→Aと表示する事が出来ます。
ここで自分が困ったのが
as2で仮に、クリックで次々に新しいムービークリップを生成するようなFLASHを作りたい場合、
常に最前面に表示させておきたいムービークリップ(main_MC)があったとすると
以前は
A.swapDepths( 255 );
などとして、はるか前面に深度を設定することで管理していたのですが。
AS3で
setChildIndex(A, 255);
とすると、エラーが出てしまいます。
これはAS3の表示オブジェクトコンテナの子リストのインデックス番号に欠落番号があってはいけないためです。
この場合
後から次々と生成するムービークリップを
stage.addChildAt(MC_X ,0); //MC_Xを表示リストの0に追加
とすることで、あらかじめ配置しておいた常に最前面に置いておきたいムービークリップ(main_MC)の表示リストのインデックス番号を1→2→3、、、と自動で押し上げてくれます。