flash播放器:Flash AS3教程:ClassLoader类

  主要用途:

  1、在用flash做项目时候些元件通过设置链接类然后使用这个类通过getClass思路方法即可把这个素材拿下来

Flash AS3教程:ClassLoader类

  图1(详见例1)

  2、将许多许多类分库到区别swf中然后通过swf达到类库功能然后通过getClass来获取类(详见例2)

  index.base.net.ClassLoader类讲解:

  加载swf文件并且通过getClass获取类也可以获取命名空间或者定义

  构造

  public function ClassLoader(obj:Object = null,lc:LoaderContext = null)

  参数1可以是可以是ByteArray如果为前者则采用load思路方法后者采用loadBytes思路方法

  参数2是创建带有指定 LoaderContext 对象ClassLoader例子LoaderContext 可以设置是否加载跨域文件应用域等详见官方LoaderContext类讲解!

  load 思路方法

  public function load(_url:String,lc:LoaderContext = null):void

  加载文件

  参数1是加载地址参数2见构造

  loadBytes 思路方法

  public function loadBytes(s:ByteArray,lc:LoaderContext = null):void

  加载字节文件

  参数1是字节数据参数2见构造

  getClass 思路方法

  public function getClass(Name:String):Object

  获取个公共定义可以是类也可以是命名空间或者定义

  参数1是获取完整包加类名比如我们这个类完整定义名称是 index.base.net.ClassLoader

  详见例子

  hasClass 思路方法

  public function hasClass(Name:String):Boolean

  返回是否含有该公共定义

  参数1见getClass思路方法

  clear 思路方法

  public function clear:void

  清空

  url 属性

  public var url:String

  获取url属性

  loader 属性

  public var loader:Loader

  获取loader属性

  例子1:

Flash AS3教程:ClassLoader类

  图2

  这是个虚拟人物形象动作包其中包含了8种区别动作

  在使用ClassLoader加载这个swf动作包后即可使用getClass来这些素材而且可以重复这些元件来达到多次重复使用

import index.base.net.ClassLoader;
  
var cl:ClassLoader = ClassLoader;
cl.load(".swf");
  
cl.addEventListener(Event.COMPLETE,fun);
  
function fun(e:Event){
 var tmp = cl.getClass("drag");
 addChild( tmp); 
}


  例子2:

  将设我有个类库有这么 3个类

  然后把它编译成swf

  我们另外建个文件来加载这个所谓类库

import index.base.net.ClassLoader;
  
var cl:ClassLoader = ClassLoader;
cl.load(".swf");
  
cl.addEventListener(Event.COMPLETE,fun);
  
function fun(e:Event){
 var tmp1 = cl.getClass("index.base.net.ByteLoader");
 trace(tmp1)
 
 var tmp2 = cl.getClass("index.base.net.ClassLoader");
 trace(tmp2)
 
 var tmp3 = cl.getClass("index.base.geom.Dot");
 trace(tmp3)
}
  
/**
* trace结果:
* [ ByteLoader]
* [ ClassLoader]
* [ Dot]
*/


  我们就达到了!

  接下来是源代码!

package index.base.net{
 
 import flash.display.Loader;
 import flash.net.URLRequest;
 import flash.utils.ByteArray;
 import flash.events.Event;
 import flash.events.ProgressEvent;
 import flash.events.EventDispatcher;
 import flash.system.LoaderContext;
 
 public ClassLoader extends EventDispatcher{
  
  public var url:String;
  public var loader:Loader;
  
  //构造
  public function ClassLoader(obj:Object = null,lc:LoaderContext = null) {
   (obj != null){
    (obj is ByteArray){
     loadBytes(obj as ByteArray,lc);
    } (obj is String){
     load(obj as String,lc);
    }{
     throw Error("参数构造参数只接受ByteArray或String");
    }
   }
  }
  
  //加载
  public function load(_url:String,lc:LoaderContext = null):void{
   url = _url;
   loader = Loader;
   loader.load( URLRequest(url),lc);
   addEvent;
  }
  
  //加载字节
  public function loadBytes(s:ByteArray,lc:LoaderContext = null):void{
   loader = Loader;
   loader.loadBytes(s,lc);
   addEvent;
  }
  
  //开始侦听
  private function addEvent:void{
   loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS,progressFun);
   loader.contentLoaderInfo.addEventListener(Event.COMPLETE,completeFun);
  }
  
  //结束侦听
  private function delEvent:void{
   loader.contentLoaderInfo.removeEventListener(ProgressEvent.PROGRESS,progressFun);
   loader.contentLoaderInfo.removeEventListener(Event.COMPLETE,completeFun);
  }
  
  //加载成功发布成功事件
  private function completeFun(e:Event):void {
   delEvent;
   dispatchEvent(e);
  }
  
  //加载过程
  private function progressFun(e:ProgressEvent):void{
   dispatchEvent(e);
  }
  
  //获取定义
  public function getClass(Name:String):Object {
    loader.contentLoaderInfo.applicationDo.getDefinition(Name);
  }
  
  //是否含有该定义
  public function hasClass(Name:String):Boolean {
    loader.contentLoaderInfo.applicationDo.hasDefinition(Name);
  }
  
  //清除
  public function clear:void{
   loader.unload;
   loader = null;
  }
 }
}


Tags:  flashplayer flash播放器

延伸阅读

最新评论

发表评论