AS2で深度にハマった時のメモ

いや〜ハマったハマった。
なかなか深度の仕様は覚えられません。

TextFieldでswapDepthsしても実行されないよ!

…というわけで使えません。なるほどー。

TextField.prototype.swapDepths = MovieClip.prototype.swapDepths;

とか書けばOKです。
hitTestとかも同様です。

removeMovieClipしても消えないんだけど?

オーサリング時に配置していて、深度が負の値になっているか、

UI Componentsのコンポーネントを使用していて、深度が1048576以上になっている可能性大です。

後者の場合、DepthManagerクラスで使用可能な最上位の深度に再設定すれば正常な深度になります。

// ステージ上にUI Componentsのコンポーネントを配置
_level0.createEmptyMovieClip("test" , _level0.getNextHighestDepth() );
trace(_level0["test"].getDepth()); // デバッグ用。 出力:1048576
_level0["test"].removeMovieClip(); // 消えない。
trace(_level0["test"]); // デバッグ用。 消えていないので、 出力:_level0.test
_level0["test"].setDepthTo(DepthManager.kTop); // DepthManagerクラスで再設定
trace(_level0["test"].getDepth()); // デバッグ用。 出力:0
_level0["test"].removeMovieClip(); // 消える。
trace(_level0["test"]); // デバッグ用。 消えたので、 出力:undefined

DepthManagerなんてあったんですね〜!


以上、すばらしいFlash神の方々の記事を引用しまくりでお伝えしました。笑