加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

AS3加载swf与ApplicationDomain

发布时间:2020-12-15 17:44:24 所属栏目:百科 来源:网络整理
导读:?? http://www.voidcn.com/article/p-ticmtque-he.html 程序越来越大,我们需要把它拆分成多个swf,在需要的时候动态加载。拆分时应该尽量把不同的类编译进唯一的swf,避免因swf文件增多而使整个程序的文件尺寸增大。按此原则可以拆分出以下两种swf,借助 Ap
??

http://www.voidcn.com/article/p-ticmtque-he.html

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

? ? *?模块(Module)
? ?? ?按照程序逻辑,可以拆分出多个“功能模块”,如“注册”、“管理”等等;按照游戏或社区类程序的关卡或场景,可以拆分出不同的“场景模块”。这些模块不是主程序运行必须的,只在需要的时候加载。
? ? *?运行时共享库(RSL)
? ?? ?主场景或者多个模块通用的资源,比如位图、声音、设计好的页面元素等,可作为“库”在主程序运行前加载。可以整套更换的皮肤(skin)只需先加载一套。

  ApplicationDomain 是存放AS3定义(包括类、方法、接口等)的容器。使用Loader类加载swf时可以通过指定 ApplicationDomain 参数将swf加载到不同的域(Domain)

?

?例子:

[java] ? view plain copy
  1. package?{??
  2. ????import?flash.display.Loader;??
  3. ????import?flash.display.MovieClip;??
  4. import?flash.display.Sprite;??
  5. import?flash.events.Event;??
  6. import?flash.net.URLRequest;??
  7. import?flash.system.ApplicationDomain;??
  8. ??
  9. public?class?TestDomain?extends?Sprite??
  10. ????{??
  11. ????????public?var?url:String?=?"assets/material/tool.swf";?????
  12. ????????public?var?arr:Array;??
  13. public?var?domain:ApplicationDomain;??
  14. public?var?loader:Loader;??
  15. public?function?TestDomain()??
  16. ????????{??
  17. ????????????this.url=url;???????????????????????
  18. ????????????????loader=new?Loader();?????
  19. ????????????????loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onLoadComplement);?????
  20. ????????????????loader.load(new?URLRequest(url));?????
  21. ????????}??
  22. private?function?onLoadComplement(evt:Event):void{?????
  23. ????????????domain=new?ApplicationDomain();??
  24. ????????????domain?=?evt.currentTarget.applicationDomain;????
  25. ????????????trace(check("mouseeffect"));??????????????
  26. ????????}????
  27. ??????????
  28. private?function?check(name:String):Boolean??
  29. ????????{????
  30. ????????????var?result:Object;???
  31. ????????????var?rr:Boolean;??
  32. ????????????if(domain.hasDefinition(name)){?????
  33. ????????????????????rr=true;??
  34. ????????????????????var?cls:Class=domain.getDefinition(name)?as?Class;?????
  35. ????????????????????result=new?cls();???
  36. ?????????????????}??
  37. ????????????var?ui:MovieClip=result?as?MovieClip;?//这里可取出swf中的某个MovieClip,对他进行操作??
  38. return?rr;????????????????????
  39. ????}??
  40. }??


AS3 API注明:

Class public final class?ApplicationDomain
继承 ApplicationDomain?Object


ApplicationDomain?类是分散的类定义组的一个容器。应用程序域用于划分位于同一个安全域中的类。它们允许同一个类存在多个定义,并且允许子级重用父级定义。

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才能成为一个对象
????}

)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读