将影片loadMovie入一个影片剪辑后,会替换原影片剪辑中的所有内容

做的一个项目需要加入换肤功能,为了方便维护,将皮肤做成swf放在主文件外部,调用主文件时,首先会载入皮肤文件。但是,项目的主要功能做在影片剪辑中,并继承MovieClip类。如果要在这个影片剪辑中载入皮肤文件,则会冲掉原影片剪辑中的所有内容(如题)。

我的影片剪辑中并没有内容,它绑定一个类文件,所有的组件都是利用类文件中的方法从库中动态载入的。既然影片剪辑中没有内容,能否就直接载入皮肤文件呢?首先做个实验再说:

 1createEmptyMovieClip("a", 0);
 2mcl = new MovieClipLoader();
 3a.fun = function() {
 4    trace("A!");
 5};
 6onLoadInit = function (mc) {
 7    trace("load b.swf ok");
 8    trace("load done, a.fun:"+mc.fun);
 9};
10mcl.addListener(this);
11mcl.loadClip("b.swf", a);
12trace("load start, a.fun:"+a.fun);

测试的结果如下:

load start, a.fun:[type Function]
load b.swf ok
load done, a.fun:undefined

可见,loadMovie不仅替换掉了影片剪辑中的所有视觉内容,还清除掉了所有的变量、函数。看来项目必须从继承改为合成了。