在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;
Word教程网 | Excel教程网 | Dreamweaver教程网 | Fireworks教程网 | PPT教程网 | FLASH教程网 | PS教程网 |
HTML教程网 | DIV CSS教程网 | FLASH AS教程网 | ACCESS教程网 | SQL SERVER教程网 | C语言教程网 | JAVASCRIPT教程网 |
ASP教程网 | ASP.NET教程网 | CorelDraw教程网 |