在论坛经常看到Loading加载方式的探讨,不过大多都是讨论用何种加载方法及代码,今天我想对Flash中加载影片时,Loading的位置对影片的影响.Flash Loading有多种制作及加载方式,本文研究的重点是讨论主影片中加载外部swf文件时Loading的位置对影片的影响.也就是将Loading写在主影片内部还是被加载影片中.
首先从缓存进行考虑,由于浏览器可以缓存Flash文件,因此Loading放在主影片内部,或者被加载影片中都没有影响,浏览器第一次会自动缓存这些文件.从操作以及维护上进行分析,在主影片上的Loading可以写成一个函数,然后加载外部SWF文件时可以调用这个函数,维护方便,另外如果是加载jpg等图片时候也可以使用Loading.放在被加载的外部文件中具有不同影片的Loading相互独立,可以制作多种Loading效果.从响应以及加载速度上分析:[同一主文件及外部加载文件,Flash MX2004Professional]
1: 对主文件内部Loading加载外部文件进行测试:
在主文件中新建一个按钮和一个名称为jindutiao的进度条影片,AS代码如下:
on (press) {
t1 = getTimer();
_root.createEmptyMovieClip("m1_mc", 2);//建立一个空MC
m1_mc.loadMovie("1.swf");//加载文件名为1.swf的外部文件
m1_mc._visible = false;
_root.onEnterFrame = function() {
t2 = getTimer();
var l = m1_mc.getBytesLoaded();//取得下载字节数
var t = m1_mc.getBytesTotal();//取得SWF总字节数
per = int((l/t)*100);//per是动态文本框
if ((l>=t) && (t>0)) {
t3 = getTimer();
trace(t3);
trace(t3-t2);
trace(t2-t1);
delete this.onEnterFrame;//删除帧触发事件
m1_mc._visible = true;//使MC可见
jindutiao._visible = false;//使进度条可不见
m1_mc._x = 0;//调整位置,也可调其它属性
m1_mc._y = 0;
} else {
jindutiao._visible = true;
setProperty("jindutiao", _xscale, per);
}
}
}
参数:
将Loading代码写在主文件内部时,主文件大小为3792字节,加载文件702539字节,在33400B/S的带宽下进行5次测试,时间分布如下:
21034ms
21048ms
21021ms
21060ms
21082ms
平均:21049ms,两个影片总字节数:706331
2: 对主文件加载包含Loading的外部文件进行测试:
主影片中新建一个按钮和一个名称为jindutiao的进度条影片
_root.m1_mc._x = 0;
_root.m1_mc._y = 0;
}
}
在被加载的外部文件中写Loading的AS代码:
第一帧:
total = getBytesTotal();//注意,不要用_root.getBytesTotal();因为避免被加载到主影片时会产生路径问题
loaded = getBytesLoaded();
baifenshu = int((loaded/total)*100);
baifenbi = baifenshu+"%";
setProperty("jindutiao", _xscale, baifenshu);
t = getTimer ();
第二帧:
if (baifenshu == 100) {
trace(t);
gotoAndPlay(3);
} else {
gotoAndPlay(1);
}
参数:
将Loading代码写在被加载的外部文件时,主文件大小为3395字节,加载文件702971字节,在33400B/S的带宽下进行5次测试,时间分布如下:
21038ms
21094ms
21033ms
21038ms
21030ms
平均:21046.6ms,两个影片总字节数:706336
两种方式加载的区别不是很明显,因此可以根据不同需要选择适当的加载方式.