私はホルダームービークリップを持っています、その基本クラスはfooです。
package {
import flash.display.MovieClip;
public class Foo extends MovieClip {
public function Foo() {
trace("foo");
}
}
}
foo内には、基本クラスのbarを備えた他の多数のムービークリップがあります。
package {
import flash.display.MovieClip;
public class Bar extends MovieClip {
public function Bar() {
trace("bar");
}
}
}
バーのコンストラクターにトレースを入れて、正しくロードされているかどうかを確認します。fooをシーンにドラッグしてクリップを実行すると、その中のすべての小さなバーが正しく起動します。ただし、Mainクラスのように、動的にシーンに追加すると、次のようになります。
package {
import flash.display.MovieClip;
public class Main extends MovieClip {
public function Main() {
this.addChild(new Foo());
}
}
}
突然、foo内のすべての小さなバームービークリップが通常の古いムービークリップに戻り、起動しなくなります。興味深いのは、ある時点でそれらをBarとして型キャストし、それらの通常のクラスが(基本クラスではなく、ムービークリップ自体内で)Barに設定されている場合、それは機能し、コンストラクターはすべて次のように起動します。
public function Main() {
var foo:Foo = new Foo();
stage.addChild(foo);
foo.x = 0;
foo.y = 0;
trace(foo.getChildAt(1) as Bar);
}//Main()
ただし、複数の異なるタイプのバークリップが必要で、それぞれに基本クラスのバーを指定する場合、これは機能しません。それらはすべて、一般的なムービークリップとして生成されます。またはのいずれかとしてタイプキャストすると機能しBar1
ますBar2
が、実際には、クリップをステージに追加するたびに、すべての子をすべてのトップレベルオブジェクトタイプとしてタイプキャストする必要があります。
また、Flashでは許可されていないため、同じタイプのムービークリップを多数持つことはできません。したがって、それぞれを新しいクラスにする必要があり、親がステージに配置されたときにそのクラスをタイプキャストする必要があります。一種のOOPの目的を打ち負かします。
これはFlash自体のバグのようですが、修正する方法はありますか?