我有一个动画片段持有者,其基类为foo。如果拼接到动态添加的动画片段,则动画片段不保留其基类
package {
import flash.display.MovieClip;
public class Foo extends MovieClip {
public function Foo() {
trace("foo");
}
}
}
在FOO一些其他的movieclip的,用碱的类BAR的。
package {
import flash.display.MovieClip;
public class Bar extends MovieClip {
public function Bar() {
trace("bar");
}
}
}
我把一丝杆的构造函数,因此,如果它被正确加载,我可以告诉,当我拖出富到现场,并运行剪辑,都在它的小酒吧火了正常。然而,当我在主类将其添加到现场动态,比如像这样:
package {
import flash.display.MovieClip;
public class Main extends MovieClip {
public function Main() {
this.addChild(new Foo());
}
}
}
突然间,所有foo中的小酒吧影片剪辑恢复到普通的旧影片剪辑和不火。有趣的是,如果你在某个时间点将它们当作Bar,并且它们的普通类设置为Bar(在movieclip本身而不是基类中),它就可以工作并且构造函数全部被激发,如下所示:
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或Bar2进行类型化,它会起作用,但这意味着在实践中,每次将剪辑添加到舞台上时,都必须尝试将每个孩子都视为每个顶级对象类型。由于Flash不允许,所以你也不能拥有一组相同类型的影片剪辑,所以每一个都需要成为一个新类,并且当父类放置在舞台上时,该类将被类型化。这种打败OOP的目的。
这似乎是Flash本身的错误,但有什么办法解决它吗?
您可以在这里下载一个示例文件,附带一些额外的痕迹以展示发生了什么:http://www.megaupload.com/?d=1YV20NE3它仍然有它的子项,它们被添加并显示,但它们的类型更改为MovieClip,忽略基类。
我不确定这是不是你的意思,但看看这个文件。我想这可能是你正在寻找的东西。 (如果它是我会张贴它作为答案)http://www.megaupload.com/?d=A1OPFZDO – Zevan 2010-12-19 23:10:52
它是和不是,需要有多种类型的酒吧与基类酒吧,而不是一个。但是,将其改为以这种方式工作确实有效,这似乎是因为您选择在第1帧中导出它们。当然,这具有不必要的副作用,因为需要将所有类似资源导出到第1帧并使其更加困难对于preloader,但到目前为止,这是我得到的最好的选择。 – Lance 2010-12-19 23:20:47
很酷...即使它的老式学校最可靠的预加载器类型是创建一个存根电影 - 也就是加载主电影的电影 - 这解决了第一个问题的导出问题。这看起来似乎有些骇人听闻,但考虑用其他方式做好预加载程序需要做多少工作,这是一个很小的代价。如果你是谷歌的AS3预加载器,你会明白我的意思,很多过分复杂的例子 - 并不是说它们不工作,只是说它们对于一个简单的预加载器来说很多工作。 – Zevan 2010-12-19 23:24:24