as3采用效果算法

来源:互联网 发布:黑暗之魂3奎爷捏脸数据 编辑:程序博客网 时间:2024/05/08 16:50

一、  速度与加速度

速度即目标向某个方向移动的快慢,在坐标系里面有X轴和Y轴速度。用vxvy表示。设某个物体为Ball,则Ball移动的速度为:

Ball.x+=vx;

Ball.y+=vy;

加速度即改变速度值的描述,一般用axay表示。带上加速度的Ball的运动表示如下:

vx+=ax;

vy+=ay;

Ball.x+=vx;

Ball.y+=vy;

二、  摩擦力

摩擦力即阻碍运动的力,在运动算法里面表现为减小现有速度。设摩擦力为friction,则有速度为speed,与X轴的夹角为angle。则有:

speed=Math.sqrt(vx*vx+vy*vy);

angle=Math.atan2(vy,vx);

再根据判断确定speed

if(speed>friction){

speed-=friction;

}else{

Speed=0;

}

应用到Ball里面则有:

vx=Math.cos(angle)*speed;

vy=Math.sin(angle)*speed;

Ball.x+=vx;

Ball.y+=vy;

三、  缓动

缓动即物体在移向某处时速度逐渐慢下来,一般的即从大速度到0,明显缓动时的速度与和目标点的经历有关系。一般的设目标点为(targetX,targetY,速度为vxvy,物体为Ball。则缓动算法如下:

vx=(targetX-Ball.x)* parameter

vy=(targetY-Ball.y)* parameter

Ball.x+=vx;

Ball.y+=vy;

因为直接用目标点坐标减去球坐标会导致初速度过大,所以一般乘以一个小于1的参数。将以上代码加入到EnterFrame处理器里面便可实现缓动。

四、  弹性

弹性和缓动类似,弹性就是从0到大速度再由大速度到0的循环过程。参数设定和缓动一样。所以一般的弹性代码如下:

ax=(targetX-Ball.x)* parameter

ay=(targetY-Ball.y)* parameter

vx+=ax;

vy+=ay;

Ball.x+=vx;

Ball.y+=vy;

缓动时通过加速度控制速度的,在经过目标点时速度最大。球就会继续向前移动,但是超过目标点后axay为负数了,vxvy也就会减小了。直至速度为0,此时加速度为反方向最大,从而球又会向目标点移动。从而循环下去达到弹性的效果。