• 【设为首页】
  • 【收藏闪客居】
当前位置:主页>FLASH AS 编程>AS基础篇>FLASH类>文章内容
  • AS3自写类整理笔记:ClassLoader类
  • 来源:蓝色理想 作者:iamsun1550 2008-06-04 【


例子1:


图2

这是一个虚拟人物形象的动作包,其中包含了8种不同的动作
在使用ClassLoader加载这个swf的动作包后,即可使用getClass来调用这些素材,而且可以重复的new这些元件,来达到多次重复使用

import index.base.net.ClassLoader;

var cl:ClassLoader = new ClassLoader;
cl.load("main.swf");

cl.addEventListener(Event.COMPLETE,fun);

function fun(e:Event){
  var tmp = cl.getClass("drag");
  addChild(new tmp); 
}

例子2:
将设我有一个类库,有这么三个类

import index.base.net.ByteLoader;
import index.base.net.ClassLoader;
import index.base.geom.Dot;

var bl:ByteLoader;
var cl:ClassLoader;
var dot:Dot;

然后把它编译成swf

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

import index.base.net.ClassLoader;

var cl:ClassLoader = new ClassLoader;
cl.load("main.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的结果:
 * [class ByteLoader]
 * [class ClassLoader]
 * [class 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 class ClassLoader extends EventDispatcher{
   
    public var url:String;
    public var loader:Loader;
   
    //构造函数
    public function ClassLoader(obj:Object = null,lc:LoaderContext = null) {
      if(obj != null){
        if(obj is ByteArray){
          loadBytes(obj as ByteArray,lc);
        }else if(obj is String){
          load(obj as String,lc);
        }else{
          throw new Error("参数错误,构造函数第一参数只接受ByteArray或String");
        }
      }
    }
   
    //加载
    public function load(_url:String,lc:LoaderContext = null):void{
      url = _url;
      loader = new Loader;
      loader.load(new URLRequest(url),lc);
      addEvent();
    }
   
    //加载字节
    public function loadBytes(bytes:ByteArray,lc:LoaderContext = null):void{
      loader = new Loader;
      loader.loadBytes(bytes,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(className:String):Object {
      return loader.contentLoaderInfo.applicationDomain.getDefinition(className);
    }
   
    //是否含有该定义
    public function hasClass(className:String):Boolean {
      return loader.contentLoaderInfo.applicationDomain.hasDefinition(className);
    }
   
    //清除
    public function clear():void{
      loader.unload();
      loader = null;
    }
  }
}


上一页 1 2下一页

上一篇:AS3自写类整理笔记:ByteLoader类   下一篇:无法实例化SharedObject 类
  • 用户名:新注册) 密码: 匿名评论
  • 评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规)
推荐内容

Copyright © 2006-2008 flashas.net All Rights Reserved.
网站内容咨询: admin#flashas.net (#为@) 联系QQ:40777822 浙ICP备06033001号
(本网站最佳浏览解析度为1024*768, 建议使用IE 6.0或以上版本浏览器。)