Flash AS3教程:ClassLoader类_Flash教程-查字典教程网
Flash AS3教程:ClassLoader类
Flash AS3教程:ClassLoader类
发布时间:2016-12-24 来源:查字典编辑
摘要:前面介绍了FlashAS3教程:Dot类,接着介绍ClassLoader类!主要用途:1、在用flash做项目的时候,把一些元件,通过设置链...

前面介绍了Flash AS3教程:Dot类,接着介绍ClassLoader类!

主要用途:

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

图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:http://www.jb51.net/flash/String,lc:LoaderContext = null):void

加载文件

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

loadBytes 方法

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

加载字节文件

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

getClass 方法

public function getClass(className:http://www.jb51.net/flash/String):Object

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

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

详见例子

hasClass 方法

public function hasClass(className:http://www.jb51.net/flash/String):Boolean

返回是否含有该公共定义

参数1见getClass方法

clear 方法

public function clear():void

清空

url 属性

public var url:http://www.jb51.net/flash/String

获取url属性

loader 属性

public var loader:Loader

获取loader属性

例子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:

将设我有一个类库,有这么三个类

然后把它编译成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:http://www.jb51.net/flash/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 http://www.jb51.net/flash/String){

load(obj as http://www.jb51.net/flash/String,lc);

}else{

throw new Error("参数错误,构造函数第一参数只接受ByteArray或http://www.jb51.net/flash/String");

}

}

}

//加载

public function load(_url:http://www.jb51.net/flash/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:http://www.jb51.net/flash/String):Object {

return loader.contentLoaderInfo.applicationDomain.getDefinition(className);

}

//是否含有该定义

public function hasClass(className:http://www.jb51.net/flash/String):Boolean {

return loader.contentLoaderInfo.applicationDomain.hasDefinition(className);

}

//清除

public function clear():void{

loader.unload();

loader = null;

}

}

}

相关阅读
推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  • 最新Flash教程学习
    热门Flash教程学习
    网页设计子分类