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

  • 本站文章除注明转载外,均为本站原创或者翻译。
  • 本站文章欢迎各种形式的转载,但请18岁以上的转载者注明文章出处,尊重我的劳动,也尊重你的智商;
  • 本站部分原创和翻译文章提供markdown格式源码,欢迎使用文章源码进行转载;
  • 本博客采用 WPCMD 维护;
  • 本文标题:将影片loadMovie入一个影片剪辑后,会替换原影片剪辑中的所有内容
  • 本文链接:http://zengrong.net/post/218.htm

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

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

createEmptyMovieClip("a", 0);
mcl = new MovieClipLoader();
a.fun = function() {
    trace("A!");
};
onLoadInit = function (mc) {
    trace("load b.swf ok");
    trace("load done, a.fun:"+mc.fun);
};
mcl.addListener(this);
mcl.loadClip("b.swf", a);
trace("load start, a.fun:"+a.fun);

测试的结果如下:

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

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