AS3加载swf与ApplicationDomain
2010-06-25 15:10
176 查看
程序越来越大,我们需要把它拆分成多个swf,在需要的时候动态加载。拆分时应该尽量把不同的类编译进唯一的swf,避免因swf文件增多而使整个程序的文件尺寸增大。按此原则可以拆分出以下两种swf,借助 ApplicationDomain 共享其代码和资源。
* 模块(Module)
按照程序逻辑,可以拆分出多个“功能模块”,如“注册”、“管理”等等;按照游戏或社区类程序的关卡或场景,可以拆分出不同的“场景模块”。这些模块不是主程序运行必须的,只在需要的时候加载。
* 运行时共享库(RSL)
主场景或者多个模块通用的资源,比如位图、声音、设计好的页面元素等,可作为“库”在主程序运行前加载。可以整套更换的皮肤(skin)只需先加载一套。
ApplicationDomain 是存放AS3定义(包括类、方法、接口等)的容器。使用Loader类加载swf时可以通过指定 ApplicationDomain 参数将swf加载到不同的域(Domain)
例子:
AS3 API注明:
ApplicationDomain 类是分散的类定义组的一个容器。应用程序域用于划分位于同一个安全域中的类。它们允许同一个类存在多个定义,并且允许子级重用父级定义。
从指定的应用程序域获取一个公共定义。该定义可以是一个类、一个命名空间或一个函数的定义。
(故此不能直接 var ob:Object=domain.getDefinition(name);
而
if(domain.hasDefinition(name)){
var cls:Class=domain.getDefinition(name) as Class;
result=new cls(); //必须new一个class才能成为一个对象
}
)
* 模块(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 |
getDefinition | () | 方法 |
public function getDefinition(name:String):Object
从指定的应用程序域获取一个公共定义。该定义可以是一个类、一个命名空间或一个函数的定义。
(故此不能直接 var ob:Object=domain.getDefinition(name);
而
if(domain.hasDefinition(name)){
var cls:Class=domain.getDefinition(name) as Class;
result=new cls(); //必须new一个class才能成为一个对象
}
)
相关文章推荐
- AS3安全沙箱实现跨域加载swf,jpg,png,gif
- as3 对于加载进来多层swf缩放操作
- 绕开AS3安全沙箱,跨域加载SWF
- Flex加载flash_as3_swf,并响应其中的按钮事件
- AS3安全沙箱实现跨域加载swf,jpg,png,gif
- AS3:加载swf
- AS3如何加载自身SWF
- 绕开AS3安全沙箱,跨域加载SWF
- AS3 FLASH,加载外部swf的loading方法
- AS3:加载swf,直接根据类名获取影片剪辑
- 绕开AS3安全沙箱,跨域加载SWF
- 反其道为之,as3加载flex的swf
- AS3加载swf与ApplicationDomain
- 绕开AS3安全沙箱,跨域加载SWF
- 绕开AS3安全沙箱,跨域加载SWF
- as3的swf不能加载含有as2.0脚本以下的swf文件吗?
- 绕开AS3安全沙箱,跨域加载SWF
- 绕开AS3安全沙箱,跨域加载SWF(转)
- 绕开AS3安全沙箱,跨域加载SWF
- AS3加载外部swf资源库中的元件(MovieClip)