BulkLoader

来源:互联网 发布:svg在线编辑器源码 编辑:程序博客网 时间:2024/05/01 01:39

BulkLoader是一个不错且使用简单的开源加载类,其能实现对不同类型文件的加载进行管理。 
在尝试加载多个文件时候只要使用 add + 文件地址,在加载结束后使用 “get文件类型”+文件地址或加载时候注册的id去获得要得到的文件。 
下载地址: http://code.google.com/p/bulk-loader/ 
官方:http://www.stimuli.com.br/trane/2007/nov/25/loading-reloaded/ 

[java] view plaincopy
  1. package {    
  2.  import br.com.stimuli.loading.BulkLoader;    
  3.  import br.com.stimuli.loading.BulkProgressEvent;    
  4.  import flash.events.*;    
  5.  import flash.display.*;    
  6.  import flash.media.*;    
  7.  import flash.net.*;    
  8.  public class SimpleExampleMain extends MovieClip {    
  9.   public var loader:BulkLoader;    
  10.   public var v:Video;    
  11.   public var counter:int=0;    
  12.   public function SimpleExampleMain() {    
  13.    //构建BulkLoader的时候需要给它一个名称    
  14.    loader=new BulkLoader("main-site");    
  15.    //设置输出日志    
  16.    loader.logLevel=BulkLoader.LOG_INFO;    
  17.    //构建好了以后,通过add方法往队列里添加需要加载的对象    
  18.    loader.add("photo.png");    
  19.    //添加加载对象时候,也可以给它添加一个id,方便以后调用    
  20.    loader.add("images.jpg", {id:"bg"});    
  21.    //还可以通过priority属性调整加载对象的加载顺序,priority值越大,优先权越高,越早加载    
  22.    loader.add("list.xml", {priority:20, id:"config-xml"});    
  23.    //加载一个动画,加载动画的时候可以用pausedAtStart属性暂停播放动画    
  24.    loader.add("mov.fla", {maxTries:6, id:"the-video", pausedAtStart:true});    
  25.    //maxTries属性用于设定加载失败时的重试次数,注意,这里的“id”用了字符串命名    
  26.    loader.add("song.mp3", {"id":"soundtrack", maxTries:1, priority:100});    
  27.     
  28.    //看了最新版本的文档,已经开始支持swf和json,一阵欣喜。    
  29.    //添加一个COMPLETE事件,这个事件会在队列里的所有对象都加载完毕后触发    
  30.    loader.addEventListener(BulkLoader.COMPLETE, onAllItemsLoaded);    
  31.     
  32.    //添加一个PROGRESS事件,这个事件会在队列加载时不断触发。通常可以用于监听加载进度。    
  33.    loader.addEventListener(BulkLoader.PROGRESS, onAllItemsProgress);    
  34.     
  35.    //队列编辑完毕后用star方法开始加载队列    
  36.    loader.start();    
  37.   }    
  38.   public function onAllItemsLoaded(evt : Event):void {    
  39.    trace("every thing is loaded!");    
  40.    //建立一个Video对象    
  41.    var video : Video = new Video();    
  42.    //从队列里提取刚才加载的视频流    
  43.    var theNetStream:NetStream=loader.getNetStream("the-video");    
  44.    addChild(video);    
  45.    video.attachNetStream(theNetStream);    
  46.    theNetStream.resume();    
  47.    video.y=300;    
  48.    //提取图片    
  49.     
  50.    //可以直接通过url提取对象    
  51.    var bitmapCats:Bitmap=loader.getBitmap("photo.png");    
  52.    bitmapCats.width=200;    
  53.    bitmapCats.scaleY=bitmapCats.scaleX;    
  54.    addChild(bitmapCats);    
  55.     
  56.    //当然,也可以通过id提取对象    
  57.    var bitmapShoes:Bitmap=loader.getBitmap("bg");    
  58.    bitmapShoes.width=200;    
  59.    bitmapShoes.scaleY=bitmapShoes.scaleX;    
  60.    bitmapShoes.x=220;    
  61.    addChild(bitmapShoes);    
  62.     
  63.    //提取音频    
  64.    var soundtrack:Sound=loader.getSound("soundtrack");    
  65.    soundtrack.play();    
  66.     
  67.    //提取一个xml文档    
  68.    var theXML:XML=loader.getXML("config-xml");    
  69.    trace(theXML);    
  70.   }    
  71.   //通过BulkProgressEvent的loadingStatus方法可以显示加载过程中的所有信息!    
  72.   public function onAllItemsProgress(evt : BulkProgressEvent):void {    
  73.    trace(evt.loadingStatus());    
  74.   }    
  75.  }    
  76. }    


侦听事件。比较厉害的是可以通过加载时候注册的id或文件地址来侦听想要侦听的文件。

 

[java] view plaincopy
  1. // attaching events to all items:     
  2. // this will fire once all items have been loaded    
  3. loader.addEventListener(BulkLoader.COMPLETE, onAllLoaded);     
  4. // this will fire on progress for any item     
  5. // the event , BulkProgress is a subclass of ProgressEvent (with extra information)    
  6. loader.addEventListener(BulkLoader.PROGRESS, onAllProgress);    
  7. // this will fire if any item fails to load:    
  8. // the event is BulkErrorEvent and holds an array (errors) with all failed LoadingItem instances    
  9. loader.addEventListener(BulkLoader.ERROR, onAllError);     
  10. // you can also listen to events in individual items    
  11. // 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)    
  12. loader.get("bg").addEventListener(Event.COMPLETE,onBackgroundLoaded)    
  13. // this will only trigged if the config.xml loading fails:    
  14. loader.get("list.xml").addEventListener(BulkLoader.ERROR, onXMLFailed);    
 

获取文件方式: 

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

BulkLoader的一些使用技巧 

用 BulkLoader实例的add()方法可以很方便地将素材地址加入加载列表 
但是当素材太多的时候,加载进度会不准确 
解决的办法是将 每个文件的大小提前告诉BulkLoader 
例如:dang.mp3 是1000KB 

[java] view plaincopy
  1. _loader.add("dang.mp3", { id:"dangSound", type:"sound",weight:1000 } );    
 

防止缓存

[java] view plaincopy
  1. preventCache:false    
 

做一个负责加载和承载资源的全局单例 对加载的资源进行判断,已经加载的资源 就无需LOADING 
没有加载的 就 新add() 这样做相当好 

[java] view plaincopy
  1. if (!_bulkLoader.hasItem(this._url)) {    
  2.   _bulkLoader.add(this._url, { type: BulkLoader.TYPE_MOVIECLIP } );    
  3.   _bulkLoader.start();    
  4. }else {    
  5.   _bulkLoader.reload(this._url);    
  6. }    
  7. trace(_bulkLoader.items.length);