标题:
模块化加载,设置加载域
[打印本页]
作者:
yuyang911220
时间:
2016-8-20 21:26
标题:
模块化加载,设置加载域
当程序越来越大,我们需要把它拆分成多个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 的类似结构:
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/)
Powered by Discuz! 7.0.0