AS3自写类整理笔记 ClassLoader类

 更新时间:2008年06月04日 19:41:18   作者:  
在用flash做项目的时候,把一些元件,通过设置链接类,然后使用这个类,通过getClass方法即可把这个素材拿下来

例子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;
    }
  }
}

相关文章

  • Google Analytics在Flash cs3下的使用教程分析

    Google Analytics在Flash cs3下的使用教程分析

    因为工作的原因,最近使用到Google Analytics组件,这个组件在网上的资料很多,但是大部分都是详谈组件的优势的,具体的使用没有很详细的说明
    2009-02-02
  • ActionScript 3.0 编程体验

    ActionScript 3.0 编程体验

    日前,Adobe公司发布了Flash的最新版本Flash Professional 9 ActionScript 3.0 Preview,这是Flash 9的预览版,正式版本估计要到2007年才会推出,
    2008-03-03
  • AS3打开新窗口不被屏蔽的代码

    AS3打开新窗口不被屏蔽的代码

    有时候flash打开的网址会出现被屏蔽的现象,如何能轻松的打开而不被屏蔽呢,下面是具体的代码。
    2010-08-08
  • as3+xml+asp+access做的有奖问答

    as3+xml+asp+access做的有奖问答

    as3+xml+asp+access做的有奖问答实现代码
    2009-02-02
  • As3.0 xml + Loader应用代码

    As3.0 xml + Loader应用代码

    简单说说AS3.0中对于XML支持的不同吧: .AS2.0对XML的支持勉勉强强,将就着可以用。而AS3.0中对XML的支持是全方位的,极其强大和灵活的
    2008-03-03
  • AS3自写类整理笔记 Dot类

    AS3自写类整理笔记 Dot类

    拖拽物体1和物体2,就可以看到效果了 index.base.geom.Dot类讲解 基本功能:记录xy两点
    2008-06-06
  • 火山动态文本滚动条V5[AS3版]

    火山动态文本滚动条V5[AS3版]

    功能说明:本版滚动条除了继续保持体积小(小于2K),界面容易修改,资源占用率小的优势外,主要有以下几点改进: 1,使用AS3编写。 2,宽高动态指定。 3,增加滚动条背景点击事件。 4,消除了鼠标滚轮无法同时准确控制多个文本框的重大BUG。
    2008-03-03
  • flash PureMVC 使用例子

    flash PureMVC 使用例子

    昨天下了PureMVC, 看了一天文档, 迷茫啊, 找例子也没找到, 后来破解了一个看了一下, 大概地写了一个简单的用例, 先算是学习笔记吧, 先把这最简单的例子做法写一下吧( 也不知道这种理解是否正确哦~~汗一个!)
    2009-01-01
  • Actionscript 3.0中Singleton实现 修正篇

    Actionscript 3.0中Singleton实现 修正篇

    说明:上一篇"一个简单的Actionscript的单态模式类"的实现在Actionscript中报错,具体原因会在这篇Blog中详细说明。
    2009-02-02
  • AS3 navigateToURL导致ExternalInterface 执行失败问题

    AS3 navigateToURL导致ExternalInterface 执行失败问题

    AS3 navigateToURL导致ExternalInterface 执行失败问题
    2009-02-02

最新评论