http://blog.csdn.net/a7719665/article/details/5694083
程序越来越大,我们需要把它拆分成多个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 | () | 方法 |