Board logo

标题: 模块化加载,设置加载域 [打印本页]

作者: yuyang911220    时间: 2016-8-20 21:26     标题: 模块化加载,设置加载域

当程序越来越大,我们需要把它拆分成多个swf,在需要的时候动态加载。拆分时应该尽量把不同的类编译进唯一的swf,避免因swf文件增多而使整个程序的文件尺寸增大。按此原则可以拆分出以下两种swf,借助 ApplicationDomain 共享其代码和资源。
  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 的类似结构:





欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0