现在的位置: 首页 > 综合 > 正文

BulkLoader多个文件一起加载

2018年01月26日 ⁄ 综合 ⁄ 共 1997字 ⁄ 字号 评论关闭

     flex的单线程以及事件机制,导致了它在加载文件的时候不能多个文件一起加载,这种功能用起来有时候确实稍感繁琐。之前我的解决方案是用一个数组装载需要加载的资源路径,在一个加载完后的监听函数中便删除该路径,继续从装载资源路径的数组中取值加载,直到装载数组得长度为0,删除监听函数。某日在网上游荡,恰巧发现了某仁兄自己写了可以加载多个资源的封装类,甚喜,于是test了一把,还真行!

该封装类叫BulkLoader(它的源码就不公布了,google后很容易下载),用法很简单,add("key")(依次把你要加载的资源add进去),loader,complete,就三步,在compolete中你可以得到一个Dictionary,通过之前的key就可以得到你所加载资源的数据了。弱弱的看了下他的实现,思路跟我的差不多,就是加载完了一个紧接着加载下一个,加载一个删除一个,亮点之处在他对不同资源的加载进行了封装,比如可以是xml,jpg等,不用自己去处理了,不过稍有遗憾,他没有对gif格式的图片进行加载封装,有兴趣的可以自己加上。总之上个人觉着还可以吧,看自己,哪个爽用哪个。

测试代码如下:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
             creationComplete="init()"
    layout="vertical">
 <mx:Script>
  <![CDATA[
   import mx.controls.Label;
   import mx.core.UIComponent;
   import br.com.stimuli.loading.BulkLoader;
   import br.com.stimuli.loading.BulkProgressEvent;
   
   private var loader:BulkLoader=new BulkLoader("main");
   private function init():void
   {
    
    loader.add("assets/a.jpg");
    loader.add("assets/s.gif");
    loader.add("assets/config.xml");
    loader.add("assets/a.mp3");
    loader.add("assets/vs.flv");
    loader.addEventListener(BulkLoader.PROGRESS, onProgress);
    loader.addEventListener(BulkLoader.COMPLETE, onComplete);
    loader.start();
   }

   private function onProgress(event:BulkProgressEvent):void
   {
    trace(event.percentLoaded);
   }

   private function onComplete(event:Event):void
   {
    //只能加载gif的第一帧
    var dic:Dictionary = loader.contents as Dictionary
    /* var dic:Dictionary = loader.contents as Dictionary;
    for(var key:Object in dic){
     trace("---key:"+key+"------------value:"+dic[key]);
    }
    var pic:Bitmap = dic["assets/s.gif"] as Bitmap; */
    
    //var bgBitmap:Bitmap = loader.getBitmap("assets/s.gif");
    var bgBitmap:Bitmap = dic["assets/s.gif"];
    var ui:UIComponent = new UIComponent();
    ui.addChild(bgBitmap);
    addChild(ui);
    
    var video:Video=new Video();
    //video.attachNetStream(loader.getNetStream("assets/vs.flv"));
    //parseConfig(loader.getXML("assets/config.xml"));
   }
  ]]>
 </mx:Script>
</mx:Application>

抱歉!评论已关闭.