AS3加载swf与ApplicationDomain

37 篇文章 0 订阅


http://blog.csdn.net/a7719665/article/details/5694083

程序越来越大,我们需要把它拆分成多个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.     }  
  41. }  


AS3 API注明:

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

)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值