标签:
随着程序越来越大,我们需要把它拆分成多个swf,在需要的时候动态加载。拆分时应该尽量把不同的类编译进唯一的swf,避免因swf文件增多而使整个程序的文件尺寸增大。按此原则可以拆分出以下两种swf,借助 ApplicationDomain 共享其代码和资源。
* 模块(Module)
按照程序逻辑,可以拆分出多个“功能模块”,如“注册”、“管理”等等;按照游戏或社区类程序的关卡或场景,可以拆分出不同的“场景模块”。这些模块不是主程序运行必须的,只在需要的时候加载。
* 运行时共享库(RSL)
主场景或者多个模块通用的资源,比如位图、声音、设计好的页面元素等,可作为“库”在主程序运行前加载。可以整套更换的皮肤(skin)只需先加载一套。
ApplicationDomain 是存放AS3定义(包括类、方法、接口等)的容器。使用Loader类加载swf时可以通过指定 ApplicationDomain 参数将swf加载到不同的域(Domain)
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 AS1te extends Sprite { public var url:String = "arenaMC.swf"; public var arr:Array; public var domain:ApplicationDomain; public var loader:Loader; public function AS1te() { 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("ArenaListMC")); } 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,对他进行操作 this.addChild(ui); return rr; } } }
标签:
原文地址:http://www.cnblogs.com/duhuo/p/5003056.html