请大家先看一看下面的一段SWF文件的REPORT:
Movie Report
------------
Frame # Frame Bytes Total Bytes Page
------- ----------- ----------- ---------------
1 76 76 loading
2 5971 6047 2
3 222 6269 3
4 50 6319 4
5 68089 74408 版头
6 156 74564 2
7 156 74720 3
8 156 74876 4
9 156 75032 5
可以看出这个动画文件在前5帧就需要Loading70多K的数据,由于这帧用的是动画背景声音文件,并且已经无法再减小其大小,此时你可以采取时间模拟术来使得下载比发生变化,由于本制做方法与常规的loading制做在图形制做方面完全一致,故仅列出编程部分:
第一帧: 先取得时间初始值
Set Variable: "begin" = GetTimer
Set Variable: "delaytime"= 20
Set Variable: "begintime" = 0
第二帧:计算下载比。 begin代表用来比较的时间初始值,begintime表示已经下载了多少秒时间, loaded_num表示下载进度显示比(跟一般的loading制做下载比,初值是1),delaytime表示想要模拟的秒钟数。
Set Variable: "downloaded" = GetTimer
If ((begintime < delaytime ) and ( _framesloaded < 8 ))
comment:当时间小于20秒,并且已经下载帧数小于8时便做,
判断下载的帧数据是为了不让在本地硬盘上也等待相同的时间。
If (downloaded-begin>1000)
comment:当时间够一秒钟时就必需将下载比加1,时间加1秒,并重置初始时间。
Set Variable: "loaded_num"= loaded_num+1
Set Variable: "begintime" = begintime+1
Set Variable: "begin" = GetTimer
End If
Else
comment:跟正常的loading制做很相似,但必需加上前面的时间数,
用88去乘是因为根本不用完全等待动画下载完毕使可播放,
正常情况应是(100-delaytime),具体数值要根椐动画大小与总帧数来定。
Set Variable: "loaded_num" = delaytime+int(88*_framesloaded/_totalframes)
End If
Begin Tell Target ("/preload")
comment:显示进度条
Go to and Stop (/:loaded_num)
End Tell Target
comment:建议用大于等于判断下载比,且最好不用100,这样不会死循环。
If (loaded_num>=98)
Go to and Play (4)
End If
第三帧:循环。
Go to and Play (2)
第四帧:正常的动画内容。
注意:
这个loading制做比一般的制做多一帧,需三帧来完成。
时间模拟并不限定在什么位置,你可以根椐你的需要来对上述程序进行调整。最关键的就是①保证下载比的连续性。②下载比不超过100。③不死循环。
尽量不要使用这种技术,而应该合理安排各个动画场景的的出场次序,让下载更加均匀。