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

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

1
2
3
4
5
6
7
8
9
10
11
12
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不仅替换掉了影片剪辑中的所有视觉内容,还清除掉了所有的变量、函数。看来项目必须从继承改为合成了。

留言

2006-07-21
次访问