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神の方々の記事を引用しまくりでお伝えしました。笑