当前位置: 首页 > 图文教程 > Flash动画 > ActionScript > Flash AS2教程:缓冲运动

ActionScript
FLASH AS3与网页JS参数值传递的问题
Flash AS3的parameters对象处理网页参数
Flash教程 认识Flash ActionScript的环境
Flash ActionScript编程基础
Flash AS3代码实现鼠标跟随喷枪涂鸦效果
falsh 跨域调用配置
Flash AS3.0 实例教程 喷泉动画特效
AS3 Loader与URLLoader的比较
ColorTransform类调整显示对象的颜色值
Flash AS3 快速制作烟雾动画
Flash AS3 制作文字飞出动画
ActionScript 学习小心得
ActionScript3.0读取网页FlashVars中的参数的问题
通过实例学习AS3.0:案例三
通过实例学习Flash AS3.0:案例四
通过实例学习Flash AS3.0:案例五
通过实例学习Flash AS3.0:案例六
Flash教程:认识Flash ActionScript的环境
Flash as入门(1):认识AS面板
Flash as入门(3):AS基本语法

ActionScript 中的 Flash AS2教程:缓冲运动


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-30   浏览: 50 ::
收藏到网摘: n/a

 现在大家应该都会使用AS程序让影片剪辑动起来了。但是你按照我教你的方法做来做去,一定做得很郁闷,为什么呢?别人的FLASH看起来又流畅,又优雅,又漂亮,动起来那个好看啊,可是我的FLASH为什么动起来直不楞登的,活像机器人呢?算了,算了,别郁闷了,我还是告诉你吧,虽然咱们现在已经学会了用程序使FLASH动起来,但这只是FLASH程序动画得罪最基础的皮毛而已,就像刚刚学会走路的小孩,你还指望他能跳芭蕾?要使动画能够流畅、优雅的动起来,你还得埋头苦学才成。

优秀的FLASH动画中,影片剪辑的移动为什么看起来更流畅呢?因为它更符合生活中的运动规律,说白了两个字——缓冲。想一想汽车是怎么停下来的,速度逐渐减慢,然后停下来。任何事物在改变运动状态的时候,都是逐渐加速或者逐渐减速的,所以,要想你的动画看起来好看,你必须让动画学会缓冲才行。

先从减速运动开始。

何谓匀速运动?何为减速运动?

匀速运动,物理上来讲,就是单位时间内物体位移的值相等。而在flash里来说的话,就是每一帧里,影片剪辑的某一个属性值变化的幅度相等。拿上一次提到的代码来看:
 
myMc._x=0;
onEnterFrame=function(){
myMc._x += 1;
}

可以看到,在每一帧里,影片剪辑的x轴坐标增加了1,如果你觉得他慢吞吞得很不来劲,可以把这个值改大点,比如说改成10,

myMc._x=0;
onEnterFrame=function(){
myMc._x += 10;
}

运动速度果然快了很多,但是很抱歉,好像还是匀速的。所以,如果每帧中的数值保持不变,运动一定是匀速的。那么什么是减速运动呢?物理上来讲,就是单位时间内物体位移的值逐渐减小,最后变成零,物体就停下来了。所以,说到这里,冰雪聪明的你一定迫不及待的要举手发言了。

对了,所谓减速运动,在flash里,实现的方法就是让这个值逐渐减小,最后变成零就行了。到了这里,我们可以隆重推出我们的减速运动的公式了,看仔细了,如果你希望影片剪辑逐渐减速,到x轴坐标为500的时候停下来,那么,这样来写:
 
myMc._x=0;
onEnterFrame=function(){
myMc._x += (500-myMc._x)/10;
}

看明白了吗?没看明白得让你的大脑充分转动起来,想一想(500-myMc._x)/10是如何越变越小的。


好了,到这儿你是不是想明白了?
什么?还没有想明白,那就看下面的说明吧,想明白了的人,下面一段可以华丽的掠过了。
(500-myMc._x)/10中,10这个数字是可以随便写的,只要是正整数就行,当然写不同的数值,缓动的效果不一样。好奇的同学可以自己试一下。

我们来把循环分解,看一下这个值是如何逐步变小的。

myMc._x的初始值是1,所以,第一次循环时,括号中的数字是500,500/10,得到50,然后把50赋给myMc._x,也就是说第一帧中,myMc向右侧移动了50个像素,同时在第二次循环开始时,变成了50,这样,括号里(500-myMc._x)的值就变成了450,450/10是45,依次计算下去,你会发现这个值逐渐减小了。所以,mc的运动速度就逐渐减慢了,直到它越来越接近目标点500,这个值就越来越小,最后无限趋近于零,运动就停下来了。这就是缓动的减速运动原理。

用上这个东西以后,再去看看你的动画,是不是好看多了。其实加速运动是一样的,这里就不讲了,自己琢磨一下吧。当然,还有一个事情需要提醒一下,就是上次我们提到的,在onEnterFrame停止的时候,一定要记得清除掉循环,避免一直占用CPU资源。

myMc._x=0;
onEnterFrame=function(){
myMc._x += (500-myMc._x)/10;
if(Math.abs(500-myMc._x)<0.5){
delete this.onEnterFrame;
myMc._x=500;
}
}

Math.abs是对括号里的数字取绝对值,因为500-myMc._x永远不可能达到零,所以,我们只能取一个极为接近0的数字,比如说0.5,基本上从视觉上已经看不出它的位置上差别。所以,这个时候我们把循环清除掉,并且直接赋值给myMc._x就可以了。

这就是所谓的缓冲运动,当然在实际的flash里还有很多更复杂的运动形式,比如说钟摆式的运动,回弹运动等等,里边的有些运动方式,flash里提供一些现成的类可以方便地实现效果。关于这些缓动类的使用,我们下次再谈。