[Flash] 缓冲教程

作者:Super-Tomato
原文:http://bbs.flasher.cn/dispbbs.asp?BoardID=73&ID=24234&replyID=&skin=1

既然有人想开始学AS的话,我就顺便来写一些简单且有用的教程吧 :slight_smile:

首先是从缓冲(Elasticity) 开始

1。首先在场景上画一个圆形, 然后转换成Movieclip, 命名为 mc
2。在场景的第一个frame上使用这个代码:

mc._x = 100;
onEnterFrame = function() {
mc._x += (500 - mc._x) * .1;
}

3。测试影片

你应该会看到圆形会从左边开始向右移动,之后慢慢地停下来。那么原因是什么呢?
主要的代码为 mc._x += (500 - mc._x) *.1;
为了方便大家理解, 我们就把这个代码一步步的分析一下吧

开始我们设定mc的_x为100, onEnterFrame会让代码不断的循环

那么接下来mc._x就会是

mc._x新位置 = mc._x + (500 - mc._x) * .1;
mc._x新位置 = 100 + (500 - 100) * .1;
mc._x新位置 = 100 + (400) * .1;
mc._x新位置 = 100 + 40;
mc._x新位置 = 140; //第一次圆形移动到的位置

再次循环,把得到的mc._x再次代入:

mc._x新位置 = mc._x + (500 - mc._x) * .1;
mc._x新位置 = 140 + (500 - 140) * .1;
mc._x新位置 = 140 + (360) * .1;
mc._x新位置 = 140 + 36;
mc._x新位置 = 176; //第二次圆形移动到的位置

那么接下来一直不停的循环, mc._x的值一直增加,而运算公式(500 - mc._x)就会越来越少,到最后移动的距离也会越来越近,直到肉眼看不出在移动,这就是缓冲的公式了

再来就在增加多一点东西,让这个圆形在限定范围内不断的进行缓冲移动, 公式:

mc._x = 100;
var ax = 0;
onEnterFrame = function () {
ax += (200 - mc._x) * .1;
mc._x += ax;
};

同样的我们只是略微修改了一点, 然后测试就会看到 :效果一
http://forums.perak.org/cn/job.php?action=download&pid=tpc&tid=17932&aid=5704

至于计算方面不用我在写出来了,不了解的朋友可以从上面的演算方法去了解。。。那么最后就给个应用的例子

在这里复制了多个mc, 然后让这些mc独立的进行缓冲, 代码如下:

onLoad = function() {
num = 20; //设定星星的数量
i = 1;
while (num>=i) {
duplicateMovieClip(a, “a”+i, i);
b = eval(“a”+i);
b.rX = (random(5)+4)/1000; //设定星星移动x的速度
b.rY = (random(5)+4)/1000; //设定星星移动y的速度
b.xvel = b.yvel = 0;
b._x = random(344)+100; //设定星星复制后的x坐标
b._y = random(154)+100; //设定星星复制后的y坐标
b.gotoAndPlay(random(10)+1); //设定星星到影片中的桢, 这样每个星星闪烁就会不一样
i++;
}
a._visible = 0; //复制完毕就让场景上原来的星星消失
};

onEnterFrame = function() {
i = 1;
while (num>=i) {
b = eval(“a”+i);
b.xvel += (250 - b._x) * b.rX; //从这里开始就和我上面那个例子相同了, 所以不多说
b.yvel += (220 - b._y) * b.rY;
b._x = b._x+b.xvel;
b._y = b._y+b.yvel;
i++;
}
};
untitle.swf (263 Bytes)
Star Spring.swf (712 Bytes)

谢谢分享哦 Y^^