最近、CS3(日本語版)のリリースまで、トライアル期限をノートとデスクトップで“わかち”あいながら、旅しています。
今回は小さいながら、AS3から正確化した、“深度管理”について触れようと思います。

AS3では、可視化したオブジェクトは内部的に深度管理が行われています。

例えばAS2では、既にオブジェクトのある深度にうっかりオブジェクトを新規生成した場合、元にあったオブジェクトの参照がundefinedになるなど不具合が生じます。

これがAS3の場合、上記のようなミスが生じた場合でも、内部的に前後のオブジェクトの深度が1つずつずれ、参照の不具合はおきません。

以下に例を記します。

/** AS2 オブジェクト配置後、深度を逆転させ 同深度に新規オブジェクトを生成する */ var obj1:MovieClip = this.createEmptyMovieClip("obj1", 0); var obj2:MovieClip = this.createEmptyMovieClip("obj2", 1); var obj3:MovieClip = this.createEmptyMovieClip("obj3", 2); trace(obj1.getDepth()); //0 trace(obj2.getDepth()); //1 trace(obj3.getDepth()); //2 obj1.swapDepths(2); obj2.swapDepths(1); obj3.swapDepths(0); this.createEmptyMovieClip("obj0", 0); trace(obj1.getDepth()); //2 trace(obj2.getDepth()); //1 trace(obj3.getDepth()); //undefined

/** AS3 オブジェクト配置後、深度を逆転させ 同深度に新規オブジェクトを生成する */ var obj1:MovieClip = new MovieClip(); var obj2:MovieClip = new MovieClip(); var obj3:MovieClip = new MovieClip(); addChildAt(obj1, 0); addChildAt(obj2, 1); addChildAt(obj3, 2); trace(getChildIndex(obj1)); //0 trace(getChildIndex(obj2)); //1 trace(getChildIndex(obj3)); //2 setChildIndex(obj1, 2); setChildIndex(obj2, 1); setChildIndex(obj3, 0); var obj0:MovieClip = new MovieClip(); addChildAt(obj0, 0); trace(getChildIndex(obj1)); //3 trace(getChildIndex(obj2)); //2 trace(getChildIndex(obj3)); //1

上記現象から推測するに、Array.spliceに近い状態で内部的に深度管理がされていそうです。

“参照が無くなる状態が解消される”のは、バグの減少にもとても有用だと思います。

ではまた!

HTML5飯