?
原文:http://www.voidcn.com/article/p-ticmtque-he.html
程序越来越大,我们需要把它拆分成多个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?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注明:
?
Class |
public final class?ApplicationDomain
|
继承 |
ApplicationDomain?Object
|
ApplicationDomain?类是分散的类定义组的一个容器。应用程序域用于划分位于同一个安全域中的类。它们允许同一个类存在多个定义,并且允许子级重用父级定义。
getDefinition |
() |
方法 |