Flash算法研究—力学公式的应用
物理学,除了让你考试拿学分之外,其实是有很大的实用价值的,现在,就让我们来研究一下物理学在flash中的应用:)
运动,是动画的必要元素,作为矢量动画的flash当然也不例外。而力学,则是研究物体运动的科学,适当的运用把力学知识在你的flash动画中,会给你的动画带来意想不到的特殊效果或者让你的作品更加精致。
让我们先来复习一下力学知识,速度这个概念我向大家都知道,它是物体每单位时间运动的位移,要模拟匀速的运动是非常简单的,每桢给mc加上固定的位移就可以了,匀速运动的物理公式是
S = Vt
S是位移,V是速度,它是一个矢量,t是时间。在flash动画中,每桢之间会有固定的时间间隔,所以,这个公式可以用每桢加上固定的位移来代替。写成这样:
--------------------------------------------------------------------------------
//第一桢的action,计算x、y方向的单位位移
angle = 30*Math.PI/180;
// 运动方向和水平线之间的角度,需要转换成弧度,这个例子是角度30度,转换成弧度的公式是 a*Math.PI/180
v = 10; // 速度的大小
xstep = v*Math.cos (angle); // 计算x方向的位移量
ystep = v*Math.sin (angle); // y方向的位移量
//上面的代码只需要在初始化的时候计算一次
//第二桢
sprite._x += xstep; // 计算新的x坐标
sprite._y += ystep; // 计算新的y坐标
//上面的代码则需要每桢执行,需要放在循环的桢action里面
//第三桢
gotoandplay(2);
--------------------------------------------------------------------------------
这段代码的功能是让mc sprite沿着30度的方像以每桢10像素的速度运动。当然这是最简单的运动方式,实际生活中是没有这样完美的匀速运动的,物体在运动中都会受到各种力的影响,比如说摩擦力、空气阻力、重力等等,而在力的作用下,物体表现为加速度运动,只要受力总和不为0,则物体的速度就会每时每刻都不一样,这样的运动,就已经比较接近实际的了。
和加速运动相关的物理公式有
V=at
V仍然是速度,t是时间,新加入的a则是加速度,它是每单位时间速度的变化量,她也是一个矢量。那么a是如何计算的呢?请看下面的公式:
a = F/M
加速度公式,F是物体的受力总和,M是物体的质量,同样,F也是一个矢量。把这些元素加入到刚才的代码中,则修改这些代码如下:
--------------------------------------------------------------------------------
//第一桢的action,计算加速度
angle = -60*Math.PI/180; // 受力方向和水平线之间的角度,需要转换成弧度,这个例子是角度30度,转换成弧度的公式是 a*Math.PI/180
F = 10; // 受力的大小
vangle = 60*Math.PI/180; // 初始角度
v = 10; // 速度的大小
m = 20; // 物体质量
ax = F*Math.cos (angle)/M
ay = F*Math.sin (angle)/m //x,y方向的加速度
vx = v*Math.cos (vangle); // 计算x方向的位移量
vy = v*Math.sin (vangle); // y方向的位移量
//上面的代码只需要在初始化的时候计算一次
//第二桢
vx += ax;
vy += ay;
sprite._x += vx; // 计算新的x坐标
sprite._y += vy; // 计算新的y坐标
//上面的代码则需要每桢执行,需要放在循环的桢action里面
//第三桢
gotoandplay(2);
--------------------------------------------------------------------------------
我们可以看到,mc在舞台上划出一道抛物线。大家可以自己试验改变上面的速度质量受力和方向等参数,就可以看到mc的不同运动方式。