本文由课件大师网站收集、整理或撰写,转载请署原作者名,并请注明出处,谢谢合作!
在flash中,我们习惯做的补间动画,如果不加缓动,在前后两帧中改变元件的位置,就可以看到元件的移动动画,具体说是元件匀速运动的动画。
在flash中,是将元件在每帧设置一个新的位置来实现动画的,如让一个元件从位置0运动到位置10,设flash在每帧设置元件坐标相差为1,那么在第一帧时元件在位置0,第二帧时在位置1,第三帧时在位置2......这样就看到元件的匀速运动了,这个就是坐标差就是速度了。下面来看看用代码来实现的,物体匀速移动,设舞台上有一小球ball_mc,空剪辑ctrl_mc:
//使小球沿x轴以每帧2像素的速度匀速运动 //定义x方向的速度 var vx = 2; ctrl_mc.onEnterFrame = function(){ ball_mc._x+=vx; } //使小球沿y轴以每帧2像素的速度匀速运动只需将上面的_x属性换成_y属性
上面是给定x或者y方向的速度大小,让flash来实现物体运动,现在给定一个任意角度angle,和一个任意大小v的速度,如何让flash来实现物体的运动呢?~思路如下:
将速度v从角度angle方向分解到flash坐标系统的x,y方向,然后再分别将x,y方向的速度加到物体的x,y坐标上。代码如下:如果v=5,angle=30,则就是小球沿30度角的方向以每帧5个像素运动。
var angle:Number; var v:Number; ctrl_mc.onEnterFrame = function(){ var radians = angle*Math.PI/180; //分解速度 var vx = v*Math.cos(radians); var vy = v*Math.sin(radians); ball_mc._x += vx; ball_mc._y += vy; }
现在要使物体加速运动,那又如何实现呢~如:使小球初速度为0,以加速度为2px/f*f的沿x方向运动。思路如下:
在flash中要实现加速度,可以在每帧加入一个常数到速度,这样就实现了加速度,如:
v=0; a=2; ctrl_mc.onEnterFrame = function(){ v+=a; ball_mc._x+=v; } //在y方向同理。
物理中我们知道,给物体施加一个力,对物体就会产生一个加速度,现在我们假设给定一个方向angle,给定一个力force(如:在30度方向上给小球施加一个10N的力),那么flash又该如何描述小球运动呢?~设小球初始速度为0;
思路:仿照速度,可以将力分解为x,y方向,分别加到x,y方向的速度,然后再将速度分别加到球的x,y方向的坐标上。 var angle:Number; var force:Number; var vx = 0; var vy = 0; ctrl_mc.onEnterFrame = function(){ var radians = angle*Math.PI/180; //分解力,得出x,y方向的加速度 var ax = force*Math.cos(radians); var ay = force*Math.sin(radians); //将加速度分别加入速度上 vx += ax; vy += ay; //加入坐标 ball_mc._x += vx; ball_mc._y += vy; }
总结:要实现物体匀速运动,只需将速度v沿x,y轴分解所得的vx,vy分别加入到物体的_x,_y属性,即:vx = v*Math.cos(angle);vy=v*Math.sin(angle);ball_mc._x+=vx;ball_mc._y+=vy;要实现物体的加速运动,只需将加速度a沿x,y轴分解所得的ax,ay分别加入到物体速度在x,y轴的分量vx,vy上,然后再将vx,vy分别加到物体的_x,_y属性,即:ax = a*Math.cos(angle);ay=a*Math.sin(angle);vx+=ax;vy+=ay;ball_mc._x+=vx;ball_mc._y+=vy;
|