AS3之ApplicationDomain类(模块化编程).docx
文本预览下载声明
最近在网上看到一篇关于ApplicationDomain类的文章,有兴趣的朋友不防也去看看,网址:/?p=445浅显的研究了一下,发现用这个类竟可以调用加载进来的SWF库文件,嘿嘿,以后做大型的网络开发,这个功能可就能派上大用场了.现将代码公视如下:var loader : Loader = new Loader();var context : LoaderContext = new LoaderContext(true, ApplicationDomain.currentDomain);/* 加载到同域(共享库) */context.applicationDomain = ApplicationDomain.currentDomain;//context.applicationDomain = new ApplicationDomain(ApplicationDomain.currentDomain);loader.load(new URLRequest(m2.swf), context);loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadcom);function loadcom(the:Event):void{?var runtimeClassRef:Class = getClass(Tm);?var greeter:MovieClip = new runtimeClassRef();?addChild(greeter);?greeter.x=100;?greeter.y=200;?function getClass(className:String):Class?{? return loader.contentLoaderInfo.applicationDomain.getDefinition(className)? as? Class;?}}?这是我写在针上做的一个测试,m2为加载进来的SWF,Tm为m2库中的链接类名.当程序越来越大,我们需要把它拆分成多个swf,在需要的时候动态加载。拆分时应该尽量把不同的类编译进唯一的swf,避免因swf文件增多而使整个程序的文件尺寸增大。按此原则可以拆分出以下两种swf,借助 ApplicationDomain 共享其代码和资源。模块(Module)按照程序逻辑,可以拆分出多个“功能模块”,如“注册”、“管理”等等;按照游戏或社区类程序的关卡或场景,可以拆分出不同的“场景模块”。这些模块不是主程序运行必须的,只在需要的时候加载。运行时共享库(RSL)主场景或者多个模块通用的资源,比如位图、声音、设计好的页面元素等,可作为“库”在主程序运行前加载。可以整套更换的皮肤(skin)只需先加载一套。 ApplicationDomain 是存放AS3定义(包括类、方法、接口等)的容器。使用Loader类加载swf时可以通过指定 ApplicationDomain 参数将swf加载到不同的域(Domain):varloader : Loader = newLoader();varcontext : LoaderContext = newLoaderContext();/* 加载到子域(模块) */context.applicationDomain = newApplicationDomain(ApplicationDomain.currentDomain);/* 加载到同域(共享库) */context.applicationDomain = ApplicationDomain.currentDomain;/* 加载到新域(独立运行的程序或模块) */context.applicationDomain = newApplicationDomain();loader.load(newURLRequest(loaded.swf), context); ApplicationDomain使用类似于显示列表(DisplayList)的树形结构。相对于舞台(Stage) ,可以认为 ApplicationDomain 最根部的是系统域(system domain),包含 Flash Player 核心类定义。主程序所在的域(以下简称主域)就是它唯一的子域,类似于Stage下的文档类(Document Class)。 一个fla文档类里代码:this.stage.addChild(mySprite);this.addChild(myMC);this.addChild(myShape); 运行后的显示列表: ApplicationDomain 的类似结构:加载到子域(模块)类似于“继承”,子域可以直接获得父域所有的类定义
显示全部