和我们一起放飞理想吧!
  • 本栏最新文章
摄影专辑AD
  • 本栏推荐文章
当前位置:应用教程首页 >> FLASH教程 >> 详细内容

一步一步学ActionScript 2.0(二十三)

2007-12-29 21:25:40    作者:时进军    来源:互联网    文字大小: |  | 
简介:自己做Loading...   [学习目标]:掌握Loading制作过程中用到的几个方法getBytesTotal() ,getBytesLoaded()的使用。 上讲给大家比较了MC、按钮、文本字段的属性,要求大家把常用的几个给记住了,后面几部分我给 ...


自己做Loading...  
 [学习目标]:掌握Loading制作过程中用到的几个方法getBytesTotal() ,getBytesLoaded()的使用。
 上讲给大家比较了MC、按钮、文本字段的属性,要求大家把常用的几个给记住了,后面几部分我给大家说说MC的方法,这些方法用处很大,是as中的重点, 比如现在介绍的Loading,还有MC的复制,外部swf、jpg、txt文件的载入,MC的拖放和碰撞,MC上的绘制图形等等,所以我们分开介绍。
  Flash Loading的画面就是我们常看到的Flash中的预载画面。这个东西并不是必需的,但如果你的swf 文件比较大(大小在M级),就要考虑Loading了。因为正常情况下,动画是边下载边播放,如果网速比较慢,swf文件比较大,就会破坏作品欣赏的整体性。而如果我们加了Loading,一是可以判断动画是否下载完全,完成才进行播放;二是可以让浏览者在等待中欣赏预载动画,两全其美呀。下面我们就来介绍一下Loading动画的过程和使用到的MC的方法。
 
一、MC时间轴控制用到的方法
下面的方法都是与时间轴关系最密切的方法,前面我在教程"从gotoAndPlay()开始"中都介绍过了,不过那时我们没有说是MC的方法,让大家直接用就可以了,其实那里的控制都是针对主时间轴(_root)的,所以我们可以这样调用:
gotoAndPlay(1);等于 _root.gotoAndPlay(1);
nextFrame();等于 _root.nextFrame();
方法 说明
MovieClip.gotoAndPlay()  将播放头转到影片剪辑中的特定帧并播放 SWF 文件。
MovieClip.gotoAndStop()  将播放头转到影片剪辑中的特定帧并停止 SWF 文件。
MovieClip.nextFrame()  将播放头转到影片剪辑的下一帧。
MovieClip.play()  播放指定的影片剪辑。
MovieClip.prevFrame()  将播放头转到影片剪辑的上一帧。 
MovieClip.stop()  停止当前播放的 SWF 文件。
 如果我们这里有个MC名字是my_mc,我们可以通过上面的方法来控制my_mc的时间轴,比如:
 my_mc.gotoAndPlay(10)//播放my_mc的第10桢。
在这里回顾上教程的MovieClip._currentframe,MovieClip._totalframes,MovieClip._framesloaded属性,配合起来使用更方便的。
二、Loading中常用的MovieClip方法
方法 说明
MovieClip.getBytesLoaded()  返回为指定影片剪辑加载的字节数。
MovieClip.getBytesTotal()  以字节为单位返回影片剪辑的大小。
MovieClip.createEmptyMovieClip()  创建一个空的影片剪辑。
MovieClip.createTextField()  创建一个空的文本字段。

三、Loading的原理
循环进行下面步骤
  {
     ①、用getBytesTotal()与getBytesLoaded()方法获取文件数据。
     ②、通过文本或者动画的方式将获取的数据表现出来。
     ③、进行判断:当_root.getBytesLoaded() == _root.getBytesTotal()时,下载完成开始播放,循环结束。
  }
说明:
1、循环的实现:
  循环的目的是为了更新文件数据。具体实现有2个方法:
  ①、Loading做成两桢。在第2帧中用gotoAndPlay(1)命令产生循环,循环做的3件事情放在第1桢。
  ②、onEnterFrame事件函数,提倡用这个。
2、Loading动画
  这个是最有特色的部分,你可以做个MC直接用,也可以根据获取的数据的进行转换成旋转的角度、线条的长短等等
3、相关知识
  Math.round( )这个Math的方法有时用到,就是取整数吧,向上或向下舍入为最接近的整数。 其实就是过去的int()函数吧。
四、实例
 要求:做个简单的loading
 步骤:
 1、新建flash文档
 2、新建MC元件main_mc,这个是我们动画的主要内容,你随便做可以了,也可以不做成MC的。
 3、新建元件loading_mc,这个是你自己做的load动画。
 4、回到主场景。
 5、新建图层loading_mc,在第一桢插入关键桢,拖入你做的loading_mc元件并且给它个实例名loading_mc,第二桢插入空白关键桢。
 6、新建图层main,在第二桢插入空白关键桢,拖入你的元件main_mc。
 7、新建图层ActionScript,加as如下:
stop();
//进度条宽
barWidth = 200;
//进度条高
barHeight = 15;
//进度条开始x,y位置
startX = 180;
startY = 300;
//建立空MC:backbox_mc
_root.createEmptyMovieClip("backbox_mc", 1);
//画背景方框
makeBox(backbox_mc, barWidth, barHeight, 0x000000, 0xffffff);
//建立空MC:frontbox_mc
_root.createEmptyMovieClip("frontbox_mc", 8);
//画前景可变的方框
makeBox(frontbox_mc, barWidth, barHeight, 0x000000, 0xff8812);
//设置进度条的开始位置
backbox_mc._x = startX;
backbox_mc._y = startY;
frontbox_mc._x = startX;
frontbox_mc._y = startY;
//建立文本框:myload_txt
_root.createTextField("myload_txt", 10, 0, 0, 0, 0);
//设置文本框的属性
with (_root.myload_txt) {
 //文本框是否有背景 
 background = true;
 //文本框的背景颜色
 backgroundColor = 0xffffff;
 //文本字段中文本的颜色
 textColor = 0x000000;
 //文本字段为动态文本
 type = "dynamic";
 //文本是否可选 
 selectable = false;
 //控制文本字段的自动大小调整和对齐
 autoSize = "center";
 //文本字段的位置
 _x = startX+barWidth+20;
 _y = startY;
}
onEnterFrame = function () {
 // 取得已经调入字节数
 byteloaded = _root.getBytesLoaded();
 // 取得总字节数
 bytetotal = _root.getBytesTotal();
 loaded = Math.round(byteloaded/bytetotal*100);
 // 动态改变frontbox_mc的宽度
 frontbox_mc._width = barWidth*loaded/100;
 // 显示百分比
 _root.myload_txt.text = loaded+"%";
 if (loaded>=99) {
  onEnterFrame = null;
  // 删除对象,清理工作
  myload_txt.removeTextField();
  frontbox_mc.removeMovieClip();
  backbox_mc.removeMovieClip();
  loading_mc.swapDepths(12);
  loading_mc.removeMovieClip();
  // 主动画开始
  _root.play();
 }
};
//画方框函数,objN,width, height, linecolor, fillcolor分别为:
画框的MC,宽、高、线的颜色、填充颜色
function makeBox(objN, width, height, linecolor, fillcolor) {
 with (objN) {
  beginFill(fillcolor);
  lineStyle(1, linecolor, 100);
  moveTo(0, 0);
  lineTo(width, 0);
  lineTo(width, height);
  lineTo(0, height);
  lineTo(0, 0);
  endFill();
 }
}
 
效果查看 | 源代码下载

五、本地调试
 在本地进行调试,由于带宽的原因,可能看不到loading动画,你可以看下面的演示进行带宽设置进行调试。
查看演示动画

六、说明
 1、这里给大家讲的loading是针对独立的一个swf文件而言的方法,如果你在swf文件里面载入其他的swf、jpg、txt文件,也想在内部加入loading,也是可以的,这个要用我们后面给大家介绍的MovieClipLoader 类的方法和侦听器来完成。
 2、当在as中应用了MovieClip.attachMovie()和Sound.attachSound()方法时,Loading动画可能看不到。这是由于设置链接名称,默认选择"在第一帧导出",在发布时,"在第一帧导出"的影片剪辑或声音先导出,比主主场景第1帧的东西还早。解决的方法,就是"在第一帧导出",在loading后加个放个MC,把这些需要attach的东西先放到 里面,然后设置该MC不可见。
 这部分的内容比较少,掌握getBytesLoaded() ,getBytesTotal()这2个方法,自己会做个loading就可以了。

相关文章
绵阳网警