我有一个持有者影片剪辑,它的基类是 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");
}
}
}
我在 bar 的构造函数中放置了一个跟踪,以便我可以判断它是否被正确加载,当我将 foo 拖到场景中并运行剪辑时,其中的所有小条都会正确触发。但是,当我将它动态添加到场景中时,例如在 Main 类中:
package {
import flash.display.MovieClip;
public class Main extends MovieClip {
public function Main() {
this.addChild(new Foo());
}
}
}
突然, foo 中的所有小 bar 影片剪辑都恢复为常规的旧影片剪辑并且不会触发。有趣的是,如果您在某些时候将它们类型转换为 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()
但是,如果您需要多种不同类型的 Bar 剪辑,并为每个剪辑提供一个 Bar 基类,则此方法行不通。它们都作为通用影片剪辑生成。如果您通过并将它们类型转换为Bar1
or Bar2
,它确实有效,但这意味着在实践中,每次您将剪辑添加到舞台时,您都必须尝试将每个子对象类型转换为每个顶级对象类型。
您也不能拥有一堆相同类型的影片剪辑,因为 Flash 不允许这样做,因此每个影片剪辑都需要是一个新类,并在父级放在舞台上时对该类进行类型转换。有点违背 OOP 的目的。
这似乎是 Flash 本身的一个错误,但有什么办法可以修复它吗?