BulkLoader【整理】

BulkLoader是一個不錯且使用簡單的開源加載類,其能實現對不同類型文件的加載進行管理。
在嘗試加載多個文件時候只要使用 add + 文件地址,在加載結束後使用 “get文件類型”+文件地址或加載時候註冊的id去獲得要得到的文件。
下載地址:
http://code.google.com/p/bulk-loader/
官方:http://www.stimuli.com.br/trane/2007/nov/25/loading-reloaded/

package {
import br.com.stimuli.loading.BulkLoader;
import br.com.stimuli.loading.BulkProgressEvent;
import flash.events.*;
import flash.display.*;
import flash.media.*;
import flash.net.*;
public class SimpleExampleMain extends MovieClip {
   public var loader:BulkLoader;
   public var v:Video;
   public var counter:int=0;
   public function SimpleExampleMain() {
   //構建BulkLoader的時候需要給它一個名稱
    loader=new BulkLoader("main-site");
    //設置輸出日誌
    loader.logLevel=BulkLoader.LOG_INFO;
   
//構建好了以後,通過add方法往隊列裏添加需要加載的對象
    loader.add("photo.png");
   //添加加載對象時候,也可以給它添加一個id,方便以後調用
    loader.add("images.jpg", {id:"bg"});
    //還可以通過priority屬性調整加載對象的加載順序,priority值越大,優先權越高,越早加載
    loader.add("list.xml", {priority:20, id:"config-xml"});
    //加載一個動畫,加載動畫的時候可以用pausedAtStart屬性暫停播放動畫
    loader.add("mov.fla", {maxTries:6, id:"the-video", pausedAtStart:true});
    //maxTries屬性用於設定加載失敗時的重試次數,注意,這裏的“id”用了字符串命名
    loader.add("song.mp3", {"id":"soundtrack", maxTries:1, priority:100});

    //看了最新版本的文檔,已經開始支持swf和json,一陣欣喜。
    //添加一個COMPLETE事件,這個事件會在隊列裏的所有對象都加載完畢後觸發
    loader.addEventListener(BulkLoader.COMPLETE, onAllItemsLoaded);

    //添加一個PROGRESS事件,這個事件會在隊列加載時不斷觸發。通常可以用於監聽加載進度。
    loader.addEventListener(BulkLoader.PROGRESS, onAllItemsProgress);

   //隊列編輯完畢後用star方法開始加載隊列
    loader.start();
   }
   public function onAllItemsLoaded(evt : Event):void {
    trace("every thing is loaded!");
   //建立一個Video對象
    var video : Video = new Video();
    //從隊列裏提取剛纔加載的視頻流
    var theNetStream:NetStream=loader.getNetStream("the-video");
    addChild(video);
    video.attachNetStream(theNetStream);
    theNetStream.resume();
    video.y=300;
   
//提取圖片

    //可以直接通過url提取對象
    var bitmapCats:Bitmap=loader.getBitmap("photo.png");
    bitmapCats.width=200;
    bitmapCats.scaleY=bitmapCats.scaleX;
    addChild(bitmapCats);

    //當然,也可以通過id提取對象
    var bitmapShoes:Bitmap=loader.getBitmap("bg");
    bitmapShoes.width=200;
    bitmapShoes.scaleY=bitmapShoes.scaleX;
    bitmapShoes.x=220;
    addChild(bitmapShoes);

    //提取音頻
    var soundtrack:Sound=loader.getSound("soundtrack");
    soundtrack.play();

    //提取一個xml文檔
    var theXML:XML=loader.getXML("config-xml");
    trace(theXML);
   }
   //通過BulkProgressEvent的loadingStatus方法可以顯示加載過程中的所有信息!
   public function onAllItemsProgress(evt : BulkProgressEvent):void {
    trace(evt.loadingStatus());
   }
}
}

偵聽事件。比較厲害的是可以通過加載時候註冊的id或文件地址來偵聽想要偵聽的文件。

// attaching events to all items:
// this will fire once all items have been loaded
loader.addEventListener(BulkLoader.COMPLETE, onAllLoaded);
// this will fire on progress for any item
// the event , BulkProgress is a subclass of ProgressEvent (with extra information)
loader.addEventListener(BulkLoader.PROGRESS, onAllProgress);
// this will fire if any item fails to load:
// the event is BulkErrorEvent and holds an array (errors) with all failed LoadingItem instances
loader.addEventListener(BulkLoader.ERROR, onAllError);
// you can also listen to events in individual items
// this will fire as soon as the item registred with the id of "bg" is done loading (even if there are other items to load)
loader.get("bg").addEventListener(Event.COMPLETE,onBackgroundLoaded)
// this will only trigged if the config.xml loading fails:
loader.get("list.xml").addEventListener(BulkLoader.ERROR, onXMLFailed);

獲取文件方式:

var theBgBitmap : Bitmap = loader.getContent("bg") as Bitmap;
// you don't need to keep a reference to the loader intance, you can get it by name:
var theBgBitmap : Bitmap = BulkLoader.getLoader("main-site").getContent("bg") as Bitmap;
// you can also use the conviniece methods to get a typed object:
var theBgBitmap : Bitmap = loader.getBitmap("bg");
// grab a BitmapData directly:
var theBgBitmap : Bitmap = loader.getBitmapData("bg");

BulkLoader的一些使用技巧

用 BulkLoader實例的add()方法可以很方便地將素材地址加入加載列表
但是當素材太多的時候,加載進度會不準確
解決的辦法是將 每個文件的大小提前告訴BulkLoader
例如:dang.mp3 是1000KB
_loader.add("dang.mp3", { id:"dangSound", type:"sound",weight:1000 } );
防止緩存 preventCache:false


做一個負責加載和承載資源的全局單例 對加載的資源進行判斷,已經加載的資源 就無需LOADING
沒有加載的 就 新add() 這樣做相當好
if (!_bulkLoader.hasItem(this._url)) {
   _bulkLoader.add(this._url, { type: BulkLoader.TYPE_MOVIECLIP } );
   _bulkLoader.start();
}else {
   _bulkLoader.reload(this._url);
}
trace(_bulkLoader.items.length);

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章