我们说过,Flash制作的多媒体网站是Flash动画制作的精髓,也是Flash动画最为广泛的用途。在Flash出现以前,网站设计是静态的和Gif动画的天下。当然还有JavaApplet和JavaScript等众多技术。但这些技术的应用范围并不广泛。网络带宽也是影响网络多媒体发展的一个瓶径。但Flash出现了。它带给网络全新的意义,带给网络互动的媒体,使网络交互多媒体成为可能,成为现实。三年前当我们浏览国外的网站榜评时,还主要是停留在一些平面设计作品上,但是现在国外的榜评已经拥有了很多的互动多媒体动画网站。Flash发展的速度由此可见。IE浏览器在6.0版本中已经内置了Flash Player播放器,似乎在预示着网站制作的发展道路。让我们一起来领略互动的魅力。
Loading 预载动画程序设计
Loading网页预载程序是网页动画中的一个关键,因为即便是Flash生成的文件很小,但是制作出的大型动画对于使用调制解调器的用户速度还是需要解决的。如果没有一个预载的过程,只怕动画观看起来也不会很流畅。特别是在动画中加入了大量的声音和图像的动画没有了Loading将不会流畅的展现在我们眼前。
在此之前先学习一下在这章将要出现的属性与函数。如果由于例中使用了没有接触过的函数和属性,请先照例制作,等在以后的章节中学习了相关的其它函数后回过头来再看的话,就会完全明白例子中的作用。
◆ _framesloaded
_framesloaded是电影剪辑的属性,用来获取电影剪辑中的已经下载的帧数,当然大部的应用于电影剪辑的属性都可以应用于整部动画。此属性只能用来获取。
if(_root.mc._framesloaded>100){
_root.gotoandplay(1)
}
此例子在普通模式下输入将成为:
if(getproperty("_root.mc",_framesloaded)>100){
gotoandplay(1)
}
普通模式中对属性的获取将使用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秒钟之后才会正式开始播放,不然只会在第一帧与第二帧之间循环。