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影片。

  • 相关阅读:
    http://www.cnblogs.com/fengyin/archive/2011/01/18/1938628.html 前端优化
    iframe中子父窗口互调的js方法
    Mydomain操作说明
    Struts中出现DispatchMapping[***] does not define a handler property 的解决办法
    MyEclipse 不编译了,无论怎么更改保存, classes目录下都是空的.
    checkstyle配置文件说明
    SQLite学习手册(数据类型)
    动态加载datagrid控件的一个问题
    sharepoint
    VS.net 的一个bug
  • 原文地址:https://www.cnblogs.com/dt1991/p/15247105.html
Copyright © 2011-2022 走看看