五月综合缴情婷婷六月,色94色欧美sute亚洲线路二,日韩制服国产精品一区,色噜噜一区二区三区,香港三级午夜理伦三级三

您現(xiàn)在的位置: 365建站網(wǎng) > 365文章 > AS3自寫類整理筆記:ClassLoader類

AS3自寫類整理筆記:ClassLoader類

文章來源:365jz.com     點擊數(shù):194    更新時間:2008-07-10 08:14   參與評論

主要用途

1、在用flash做項目的時候,把一些元件,通過設(shè)置鏈接類,然后使用這個類,通過getClass方法即可把這個素材拿下來

AS3自寫類整理筆記:ClassLoader類(圖一)

圖1(詳見例1)
2、將許多許多的類分庫到不同的swf中,然后通過調(diào)用swf,達到調(diào)用類庫的功能,然后通過getClass來獲取類(詳見例2)

index.base.net.ClassLoader類講解:
加載swf文件,并且通過調(diào)用getClass獲取類,也可以獲取命名空間或者函數(shù)的定義

構(gòu)造函數(shù)
public function ClassLoader(obj:Object = null,lc:LoaderContext = null)
參數(shù)1可以是字符串,可以是ByteArray,如果為前者則采用load方法,后者采用loadBytes方法
參數(shù)2是創(chuàng)建帶有指定 LoaderContext 對象的ClassLoader實例,LoaderContext 可以設(shè)置是否加載跨域文件,應(yīng)用程序域等,詳見官方LoaderContext類講解!

load 方法
public function load(_url:String,lc:LoaderContext = null):void
加載文件
參數(shù)1是加載地址,參數(shù)2見構(gòu)造函數(shù)

loadBytes 方法
public function loadBytes(bytes:ByteArray,lc:LoaderContext = null):void
加載字節(jié)文件
參數(shù)1是字節(jié)數(shù)據(jù),參數(shù)2見構(gòu)造函數(shù)

getClass 方法
public function getClass(className:String):Object
獲取一個公共定義,可以是類,也可以是命名空間或者函數(shù)定義
參數(shù)1是獲取class的完整包加類名,比如我們的這個類完整定義名稱是 index.base.net.ClassLoader
詳見例子

hasClass 方法
public function hasClass(className:String):Boolean
返回是否含有該公共定義
參數(shù)1見getClass方法

clear 方法
public function clear():void
清空

url 屬性
public var url:String
獲取url屬性

loader 屬性
public var loader:Loader
獲取loader屬性

例子1:

AS3自寫類整理筆記:ClassLoader類(圖二)

這是一個虛擬人物形象的動作包,其中包含了8種不同的動作
在使用ClassLoader加載這個swf的動作包后,即可使用getClass來調(diào)用這些素材,而且可以重復(fù)的new這些元件,來達到多次重復(fù)使用

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:
將設(shè)我有一個類庫,有這么三個類

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的結(jié)果:
 * [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;
   
    //構(gòu)造函數(shù)
    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("參數(shù)錯誤,構(gòu)造函數(shù)第一參數(shù)只接受ByteArray或String");
        }
      }
    }
   
    //加載
    public function load(_url:String,lc:LoaderContext = null):void{
      url = _url;
      loader = new Loader;
      loader.load(new URLRequest(url),lc);
      addEvent();
    }
   
    //加載字節(jié)
    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);
    }
   
    //結(jié)束偵聽
    private function delEvent():void{
      loader.contentLoaderInfo.removeEventListener(ProgressEvent.PROGRESS,progressFun);
      loader.contentLoaderInfo.removeEventListener(Event.COMPLETE,completeFun);
    }
   
    //加載成功,發(fā)布成功事件
    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;
    }
  }
}

如對本文有疑問,請?zhí)峤坏浇涣髡搲?,廣大熱心網(wǎng)友會為你解答??! 點擊進入論壇

發(fā)表評論 (194人查看,0條評論)
請自覺遵守互聯(lián)網(wǎng)相關(guān)的政策法規(guī),嚴禁發(fā)布色情、暴力、反動的言論。
昵稱:
最新評論
------分隔線----------------------------

其它欄目

· 建站教程
· 365學(xué)習(xí)

業(yè)務(wù)咨詢

· 技術(shù)支持
· 服務(wù)時間:9:00-18:00
365建站網(wǎng)二維碼

Powered by 365建站網(wǎng) RSS地圖 HTML地圖

copyright © 2013-2024 版權(quán)所有 鄂ICP備17013400號