首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

[转]BulkLoader引见

2012-12-21 
[转]BulkLoader介绍http://uh.9ria.com/space.php?uid25405&doblog&id4754?BulkLoader是一个不错且使用

[转]BulkLoader介绍

http://uh.9ria.com/space.php?uid=25405&do=blog&id=4754

?

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);

http://uh.actionscript3.cn/space.php?uid=21904&do=blog&id=3025

热点排行