转载:http://blog.sina.com.cn/s/blog_4d4d25f50101tan2.html
在flash游戏中加载新关卡,可以采用loader来在原SWF的基础上加载外来的子SWF文件。
在主SWF的时间轴上:
var level1:Loader=new Loader();
level1.load(new URLRequest("level1.swf"));
level1.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
function onComplete(e:Event) {
stage.addChild(level1);
}
这样,level1.swf就会像一个影片剪辑一样覆盖在舞台上,此时主SWF仍然存在。
如果主角死亡或者其他关卡需要切换的情况时,比较理想的方法是先卸载当前的子swf文件,或者接着加载下一个子swf文件(下一关)。一般的教程会说使用loader的unloadAndStop()方法来彻底卸载子swf文件。但是在实际情况下会出现子swf文件从舞台消失后却不能对主swf文件进行操作,而且子swf文件中的一些影片剪辑会莫名其妙的留在舞台上,这是怎么回事呢?
我解决了很久,终于发现了问题,unloadAndStop()这个方法,的确可以删除子swf文件中的各种元件和侦听器,但是只限于该文件被加载到舞台之前就已经存在的元件和侦听器。换句话说,如果是子swf文件运行过程中创建了新的对象和侦听器,unloadAndStop()方法是没有办法把它们删除的,因此导致子swf消失后,有些元件却还没有消失。而且没有办法对主swf进行操作。
如何解决呢?一个可行的办法就是仔细查看代码,每一个在子swf运行之后被创建的对象和侦听器都要在子swf文件被卸载之前清除。
由此可以看到使用loader来加载新的关卡并不是一个很好的选择,它更适合用来加载没有交互性的swf影片。