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: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:
图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;
}
}
}
最新评论