#22006/8/23 18:08:51
这个。。我很久以前做了一个,还行,只有一个问题,那就是,调用一个函数同时读取n个swf的时候,这n个swf开时读取的时间是不同的,这个是没办法的,程序执行以及网络数据流总有先来后到。比如,大小为20k的1.swf最先开始读去,读了一半的时候,开始读取大小为20k的2.swf,这时候进度百分比会由50%变为25%,因为要读取的总量突然增加了。这时候如果用进度条来表示,会发现进度条往回退。。如果要计算读取的进度,就要在所有swf都开始读之后再开始计算。就是说肯定会发现这样的情况,进度条开始一段时间显示为0,若干时间后突然变为一个随机的百分数。好在经过测试,这并不影响执行。
附上as,实例化这个类就会开始读取,参数一是要读取的swf路径列表,参数二是要读去到的mc路径
class loadObject extends Object {
var bytesLastFrame:Number
//上一帧读取的字节数
var totalLastFrame:Number
//上一帧的总字节数
var loadMc:Array;
//影片读取器
var mcListener:Array;
//监听器
var num:Number;
//需要读取的影片数量
var bytesloaded:Number;
//已读取字节数
var bytestotal:Number;
//字节总数
var IntProgress:Number;
//进度
var obj;
var a;
var loadStart;
//读取开始标志位
var loadOver;
//读取结束标志位
var Destroy:Function;
function loadObject(mcArray:Array, parent) {
num = mcArray.length;
IntProgress = 0;
a =0;
bytesloaded=0;
bytestotal=0.01;
mcListener = new Array();
loadMc = new Array();
loadStart = num-1;
loadOver = num-1;
for (var i = 0; i<int(num); i++) {
loadMc[i] = new MovieClipLoader();
mcListener[i] = new Object();
mcListener[i].obj = this;
mcListener[i].bytesLastFrame=0;
mcListener[i].totalLastFrame=0.01
mcListener[i].onLoadProgress = function(Target_MC, loadedBytes, totalBytes) {
bytesLastFrame = int(loadedBytes);
totalLastFrame = int(totalBytes);
var a=0;
var b=0.01;
for(var j=0;j<obj.num;j++){
a+=int(obj.mcListener[j].bytesLastFrame)
b+=int(obj.mcListener[j].totalLastFrame)
}
//obj.bytesloaded += Math.abs(int(loadedBytes)-int(bytesLastFrame));
//obj.bytestotal += Math.abs(int(totalBytes)-int(totalLastFrame));
obj.IntProgress = Math.ceil(a/b*100);
};
mcListener[i].onLoadComplete = function(Target_MC) {
obj.loadOver--;
if (obj.loadOver == -1) {
_root.objCore.objMessageMap.SendMessage("LOAD_OVER", _root);
}
};
mcListener[i].onLoadStart = function(Target_MC) {
obj.loadStart--;
if (obj.loadStart == -1) {
_root.objCore.objMessageMap.SendMessage("LOAD_START", _root);
}
};
loadMc[i].addListener(mcListener[i]);
}
for (var i = 0; i<int(num); i++) {
loadMc[i].loadClip(mcArray[i]._name+".swf", mcArray[i]);
}
}
}