 
- UID
- 1029342
- 性别
- 男
|

当程序越来越大,我们需要把它拆分成多个swf,在需要的时候动态加载。拆分时应该尽量把不同的类编译进唯一的swf,避免因swf文件增多而使整个程序的文件尺寸增大。按此原则可以拆分出以下两种swf,借助 ApplicationDomain 共享其代码和资源。
- 模块(Module)
按照程序逻辑,可以拆分出多个“功能模块”,如“注册”、“管理”等等;按照游戏或社区类程序的关卡或场景,可以拆分出不同的“场景模块”。这些模块不是主程序运行必须的,只在需要的时候加载。 - 运行时共享库(RSL)
主场景或者多个模块通用的资源,比如位图、声音、设计好的页面元素等,可作为“库”在主程序运行前加载。可以整套更换的皮肤(skin)只需先加载一套。 ApplicationDomain 是存放AS3定义(包括类、方法、接口等)的容器。使用Loader类加载swf时可以通过指定 ApplicationDomain 参数将swf加载到不同的域(Domain):
var
loader : Loader= new
Loader ();
var
context: LoaderContext = new
LoaderContext() ;
/* 加载到子域(模块) */
context . applicationDomain = new
ApplicationDomain( ApplicationDomain. currentDomain ) ;
/* 加载到同域(共享库) */
context . applicationDomain = ApplicationDomain. currentDomain ;
/* 加载到新域(独立运行的程序或模块) */
context . applicationDomain = new
ApplicationDomain() ;
loader . load ( new
URLRequest ( " 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 的类似结构:
 |
|