您的位置:首页 > 移动开发

AS3加载swf与ApplicationDomain

2014-02-06 12:01 176 查看

http://blog.csdn.net/a7719665/article/details/5694083

程序越来越大,我们需要把它拆分成多个swf,在需要的时候动态加载。拆分时应该尽量把不同的类编译进唯一的swf,避免因swf文件增多而使整个程序的文件尺寸增大。按此原则可以拆分出以下两种swf,借助 ApplicationDomain 共享其代码和资源。

    * 模块(Module)

      按照程序逻辑,可以拆分出多个“功能模块”,如“注册”、“管理”等等;按照游戏或社区类程序的关卡或场景,可以拆分出不同的“场景模块”。这些模块不是主程序运行必须的,只在需要的时候加载。

    * 运行时共享库(RSL)

      主场景或者多个模块通用的资源,比如位图、声音、设计好的页面元素等,可作为“库”在主程序运行前加载。可以整套更换的皮肤(skin)只需先加载一套。

  ApplicationDomain 是存放AS3定义(包括类、方法、接口等)的容器。使用Loader类加载swf时可以通过指定 ApplicationDomain 参数将swf加载到不同的域(Domain)

 

 例子:

[java] view
plaincopy

package {  

    import flash.display.Loader;  

    import flash.display.MovieClip;  

    import flash.display.Sprite;  

    import flash.events.Event;  

    import flash.net.URLRequest;  

    import flash.system.ApplicationDomain;  

  

    public class TestDomain extends Sprite  

    {  

        public var url:String = "assets/material/tool.swf";     

        public var arr:Array;  

        public var domain:ApplicationDomain;  

        public var loader:Loader;  

        public function TestDomain()  

        {  

            this.url=url;                       

                loader=new Loader();     

                loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onLoadComplement);     

                loader.load(new URLRequest(url));     

        }  

        private function onLoadComplement(evt:Event):void{     

            domain=new ApplicationDomain();  

            domain = evt.currentTarget.applicationDomain;    

            trace(check("mouseeffect"));              

        }    

          

        private function check(name:String):Boolean  

        {    

            var result:Object;   

            var rr:Boolean;  

            if(domain.hasDefinition(name)){     

                    rr=true;  

                    var cls:Class=domain.getDefinition(name) as Class;     

                    result=new cls();   

                 }  

            var ui:MovieClip=result as MovieClip; //这里可取出swf中的某个MovieClip,对他进行操作  

            return rr;                    

        }  

    }  

}  

AS3 API注明:

Classpublic final class ApplicationDomain
继承ApplicationDomain Object
ApplicationDomain 类是分散的类定义组的一个容器。应用程序域用于划分位于同一个安全域中的类。它们允许同一个类存在多个定义,并且允许子级重用父级定义。

getDefinition()方法
public function getDefinition(name:String):Object

 从指定的应用程序域获取一个公共定义。该定义可以是一个类、一个命名空间或一个函数的定义。
(故此不能直接 var ob:Object=domain.getDefinition(name);



  if(domain.hasDefinition(name)){

       var cls:Class=domain.getDefinition(name) as Class;

       result=new cls();    //必须new一个class才能成为一个对象

    }


)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: