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);
  • 相关阅读:
    code#5 P2 棋子
    code#5 P1 报告
    ztz11的noip模拟赛T3:评分系统
    20181101noip模拟赛T1
    20181031noip模拟赛T2
    20181031noip模拟赛T1
    Linux进程的五个段
    进程和线程有什么区别
    shell中if条件字符串、数字比对,[[ ]]和[ ]区别
    Python实现单例模式
  • 原文地址:https://www.cnblogs.com/AS30/p/2244810.html
Copyright © 2011-2022 走看看