zoukankan      html  css  js  c++  java
  • AS3.0 卸载子SWF文件 unloadAndStop()方法的注意事项

    转载: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影片。

  • 相关阅读:
    Math对象
    MDN中的对象原型
    构造函数的静态成员和实例成员
    js对象的九大特点
    对象数据的使用方法
    创建对象的所有方式
    Linux下gcc编译器的使用
    Linux vim环境设置
    Linux下is not in the sudoers file解决方法
    mySQL相关函数的使用
  • 原文地址:https://www.cnblogs.com/dt1991/p/15247105.html
Copyright © 2011-2022 走看看