zoukankan      html  css  js  c++  java
  • as3开源类库:用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或文件地址来侦听想要侦听的文件。

    // 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);
  • 相关阅读:
    PAT (Advanced Level) 1060. Are They Equal (25)
    PAT (Advanced Level) 1059. Prime Factors (25)
    PAT (Advanced Level) 1058. A+B in Hogwarts (20)
    PAT (Advanced Level) 1057. Stack (30)
    PAT (Advanced Level) 1056. Mice and Rice (25)
    PAT (Advanced Level) 1055. The World's Richest (25)
    PAT (Advanced Level) 1054. The Dominant Color (20)
    PAT (Advanced Level) 1053. Path of Equal Weight (30)
    PAT (Advanced Level) 1052. Linked List Sorting (25)
    PAT (Advanced Level) 1051. Pop Sequence (25)
  • 原文地址:https://www.cnblogs.com/AS30/p/2244810.html
Copyright © 2011-2022 走看看