【flash】flash制作loading进度条

一、要实现的效果

很多动画开头都有一个loading进度条,进度条满了后进入主页动画,那么这个进度条怎么做呢。

二、相关知识

Loading网页预载程序是网页动画中的一个关键,因为即便是Flash生成的文件很小,但是制作出的大型动画对于使用调制解调器的用户速度还是需要解决的。如果没有一个预载的过程,只怕动画观看起来也不会很流畅。

◆ _framesloaded

_framesloaded是电影剪辑的属性,用来获取影片剪辑中的已经下载的帧数,当然大部的应用于影片剪辑的属性都可以应用于整部动画。此属性只能用来获取。

if(_root.mc._framesloaded>100){
_root.gotoandplay(1)
}

//如果影片剪辑root_mc的下载帧数大于100,播放第一帧。

此例子在普通模式下输入将成为:

if(getproperty("_root.mc",_framesloaded)>100){
gotoandplay(1)
}

//如果 获取 属性rootmc,下载的帧数,大于100,播放第一帧。
  普通模式中对属性的获取将使用getproperty函数,但此函数在新的.语法的使用中并非最佳,在以下的例子中将不再引用。此例中以获得电影剪辑已经下载的帧数大于100时,开始返回场景重新播放。这也是在网站制作中一个比较典型的例子,很多的电影剪辑因为体积问题,在“流”式播放过程中不会很流畅。而下例将是一个错误的例子。
_root.mc._framesloaded=100;
_root.gotoandplay(1);
在编程中将不允许对_framesloaded属性进行赋值,如果你想当下载的帧数等于100时根目录开始回放的话,请按下例制作。
if(_root.mc._framesloaded=100){
_root.gotoandplay(1);
}

◆ _totalframes

_totalframes属性是用来获取电影剪辑实体的总帧数。也可以用来获取动画的总帧数。在下例中会看到它的用法。
i=_root.mc._totalframes;
if(_root.cuttentframes=i);
_root.stop();
}
程序中将电影剪辑实体的总帧数赋值赋予了变量i,而当主场景的动画播放指针播放到与电影剪辑中的总帧数相同的数目时,动画停止播放。此属性同样为非赋值属性。

◆ ifFramesloaded

ifFramesloaded函数也是用来获取已经下载的帧数的,与_framesloaded不同的是它用于一个简单的行为来描述已下载的帧数。而且此函数似乎是专为Loading设计,它位于Basic Actions指令集,指令名称为If Frames Is Loaded。以下实例将构成一个最为简单的Loading。
ifFrameLoaded(_totalframes){
gotoandplay(3);
}else{
gotoandplay(1);
}
将此程序加于影片的第二帧,可用于所有动画的预载技术。意思为当装入的帧数为总帧数时开始播放第三帧,如果不然,播放第一帧。在Flash5以后开始使用更多的函数和属性,所以此函数不推荐使用。

◆ getBytesLoaded()

getBytesLoaded()为获取电影剪辑实体的已下载字节数,如果是外部动画将返回动画的总字节数。GetBytesLoaded用于更加精确的Loading设计,因为它并不像_framesloaded属性是获取影片的总帧数,而是以字节做为单位获取。如果说动画的最后一帧将是一个大型的图像或是声音角色的话,哪么_framesloaded所获得的百分比将不准确,getBytesLoaded有效的弥补了此方面的不足。例:
i=_root.getBytesTotal();
if(_root.getBytesLoaded()>=1000000){
n=_root.getBytesLoaded();
if(n<=i/4){
_root.stop();
trace "下载了1M,还不到四分之一,动画太大,下载时间会很长,是否继续?"
}
}
此句的意思为当动画下载到1MB时,比较是否已经下载了动画的四分之一,如果是,停止动画的播放,在调试窗口显示“下载了1M,..."等字符串,根据动画中的其他行为判断是否继续播放。此例的另一特点是,停止的地方如果有插入电影剪辑的话,电影剪辑将不会停止播放。也可以通过动态文本显示已经下载的文字数,假设在动画的主场景中有一个变量名为text的动态文本变量,哪么例:
_root.text=_root.getBytesLoaded();
if(_root.getBytesLoaded()>=_root.getBytesTotal()){
gotoandplay(3);
}else{
gotoandplay(1);
}
动态文本框会动态显示已经下载的字节数为观众服务。观众也会了解在动画的下载过程中动态的进度了。


◆ getBytesTotal()

getBytesTotal()函数是用来获取动画或是电影剪辑的总字节数,当然我们可以通过对文件的大小来观察动画的总字节数,但对于网络上使用浏览器的观众来说,动态显示文件大小是很有必要的。还有,如果想观察动画中电影剪辑的体积就只有靠getBytesTotal()函数了。
If(_root.getBytesTotal()>=1000000){
_root.stop();
}
这个程序的意思是当动画的总字节超过1M时停止动画播放。

◆ gettimer()

gettimer()函数用来获取电影剪辑或是动画的已经播放时间数,此函数并不仅仅应用于Loading的制作,在今后的学习过程中还会接触到它。在Flash5的对动画播放时间的控制上会有gettimer()函数大显身手的舞台。但gettimer()函数获取的时间是以毫秒做为计算单位的,一般在程序制作过程中还会对它除以一千来取得秒,这样更加符合对于时间播放程序的显示。假设动画中有一个text的动态文本框变量。例:
text=gettimer()/1000;
通过帧循环或是其它的诛如OnClipEvent(enterframe)等行为的控制会动态的显示动画播放的时间过程。又例如:
text=gettimer()/1000;
if(text>=10){
gotoandstop(3);
}else{
gotoandplay(1);
}
假设此程序位于动画的主场景的第二帧。那么当开始播放10秒钟之后才会正式开始播放,不然只会在第一帧与第二帧之间循环。

三、实例操作流程

一个简单的Loading制作并不需要很高深的编程基础,而且大部份设计人员开始学习Flash脚本编程时都是从Loading开始学起的。也是因为制作Loading对于动画传播方面起着至关重要的作用。

案例一

1、建立一个as2.0的flash文件,画一个长方形,转换为影片剪辑,起名Loading 

 2、新建一层用于放代码,在第二帧写入如下代码

if (_framesloaded>=_totalframes){//如果下载的帧数大于等于总帧数
	gotoAndPlay(3);
}else{
	gotoAndPlay(1);
	setProperty("_root.loading",_xscale,(_framesloaded/_totalframes)*100);

}

 程序解读:
第1-2行中if(_framesloaded>=_totalframes)句的意思是当已经下载的帧数大于等于影片的总帧数时,跳转到第三帧开始播放。(当然第三帧就是自己的动画内容了)
第3-5行,如果下载的帧数小于总帧数的话,跳转到第一帧播放。并且安装分身名称为loading的电影剪辑的长度属性,使它的长度成为已经下载的帧数除以总帧数再乘100。
知识要点:
Loading制作很多设计人员喜欢使用帧行为,其实用很多的功能都可以实现Loading制作。本例中使用(_framesloaded/_totalframes)*100的表达式来制作进度条的宽度。其它Loading制作方法不管是用下载时间函数还是用下载字节函数,但下载数除以总数乘以100的表达式基本上是没什么变化的了。

由于动画较小,效果不明显。不在做效果

案例二:

byteloaded = _root.getBytesLoaded();//获取已下载字节数赋值给byteloaded
bytetotal = _root.getBytesTotal();//获取总字节数赋值给bytetotal
loaded = int(byteloaded / bytetotal * 100);//取整数(动态下载字节除总字节乘100,比如下载了十分之一结果就是10,下载了十分之十,就是100)赋值给loaded
t = getTimer();//返回自影片开始播放时起已经过的毫秒数赋值给t
percent = loaded + "%(" + int(byteloaded / 1000) + "k/" + int(bytetotal / 1000) + "k)";
percent = percent + "\r下载速度:" + int(byteloaded * 1000 / (t * 1024)) + "k/s";//场景上有一个变量为percent的动态文本框
loadbar.gotoAndStop(loaded);//场景上有个进度条影片剪辑,名为loadbar,去帧数为loaded的帧
timeloaded = int(t / 100);
timeremain = int(timeloaded * (bytetotal - byteloaded) / byteloaded);
timeremain = int(timeremain / 60) + "\'" + int(timeremain % 60) + "\"";
timeloaded = int(timeloaded / 60) + "\'" + int(timeloaded % 60) + "\"";
downloadtime = "已用时间:" + timeloaded + "\r" + "剩余时间:" + timeremain;
fscommand("fullscreen", "true");//全屏

byteloaded = _root.getBytesLoaded();
bytetotal = _root.getBytesTotal();
loaded = int(byteloaded / bytetotal * 100);
t = getTimer();
percent = loaded + "%(" + int(byteloaded / 1000) + "k/" + int(bytetotal / 1000) + "k)";
percent = percent + "\r下载速度:" + int(byteloaded * 1000 / (t * 1024)) + "k/s";
loadbar.gotoAndStop(loaded);
timeloaded = int(t / 100);
timeremain = int(timeloaded * (bytetotal - byteloaded) / byteloaded);
timeremain = int(timeremain / 60) + "\'" + int(timeremain % 60) + "\"";
timeloaded = int(timeloaded / 60) + "\'" + int(timeloaded % 60) + "\"";
downloadtime = "已用时间:" + timeloaded + "\r" + "剩余时间:" + timeremain;
fscommand("fullscreen", "true");

案例三

yixiazaizijie = _root.getBytesLoaded();//获取已下载字节数赋值给byteloaded
zongzijie = _root.getBytesTotal();//获取总字节数赋值给bytetotal
xiazaibaifenbi = int(yixiazaizijie / zongzijie * 100);//取整数(动态下载字节除总字节乘100,比如下载了十分之一结果就是10,下载了十分之十,就是100)赋值给loaded
t = getTimer();//返回自影片开始播放时起已经过的毫秒数赋值给t
xiazaibaifenbijishuliang = xiazaibaifenbi + "%(" + int(yixiazaizijie / 1000) + "k/" + int(zongzijie / 1000) + "k)";
xiazaibaifenbijisudu = xiazaibaifenbijishuliang + "\r下载速度:" + int(yixiazaizijie * 1000 / (t * 1024)) + "k/s";//场景上有一个变量为percent的动态文本框
loadbar.gotoAndStop(xiazaibaifenbi);//场景上有个进度条影片剪辑,名为loadbar,去帧数为loaded的帧
timeloaded = int(t / 100);
timeremain = int(timeloaded * (zongzijie - yixiazaizijie) / yixiazaizijie);
timeremain = int(timeremain / 60) + "\'" + int(timeremain % 60) + "\"";
timeloaded = int(timeloaded / 60) + "\'" + int(timeloaded % 60) + "\"";
downloadtime = "已用时间:" + timeloaded  +"\r"+ "剩余时间:" + timeremain;
yixiazaizhenshu = _framesloaded;
zongzhenshu =  _totalframes;
fscommand("fullscreen", "true");//全屏

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值