
- 本栏最新文章
- Flash AS实例教程:简单的loading 04-02
- 一个很头痛的SWF加载问题 04-01
- 用Flash去创作什么? 04-01
- 精简Flash文件体积的几个小技巧 04-01
- Flash简单实现网页中的Flash动画全屏 04-01
- flash与后台的交互 04-01
- flash缓入缓出运动 04-01
- Flash AS制作上升的水泡效果动画 03-31
- AS柔化函数(解决马赛克) 03-31
- flash+webservice 乱码问题解决一例 03-31

- 本栏推荐文章
- Photoshop教程:水灵灵的美女调出来 12-30
- AS3与后台交互 12-21
- AS3通俗教程---AS3自身loading制作 12-19
一步一步学ActionScript 2.0(二十三)
自己做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就可以了。


