物体flash课件制作中的运动符合物理规律
首先,我们可以来看一下关于平抛物体运动的动画的制作,这是一个分运动与合运动的问题,通过这个例子我们可以感受一下符合物理规律动画的基本制作过程。
物理flash课件制作的话题真的是很多很多,网上的flash课件制作也是遍地都是,但是笔者在观看了很多flash课件后发现,有些动画虽然画面和制作都很漂亮,但是物体在运动过程中并没有完全符合物体的运动规律,这可能是由于制作者在制作物体的运动时直接使用了flash中的动画效果导致的。经过笔者多年的flash动画制作经验,其实自从flash5以后,flash制作中就多了一个不可缺少的利器,那便是ActionScript编程,在最近发布的flash8中,已经发布了ActionScript2.0,这样用ActionScript对物体进行编程,使物体的运动符合物理规律便更加简便。以下,笔者便通过几个简单的例子,来表现一下ActionScript的强大功能。
第一步,新建一个动画,打开“插入”,“新建元件”来新建一个“影片剪辑”,取名ball,这里我们简单的画一个小球。然后再同样新建一个“按钮”,随便画一个按钮即可。
第二步,回到“场景”,按“Ctrl”+“L”打开“库”,将我们刚才新建的两个物体拖入“场景”中。并且分别取名为“ball”,和“start_btn”。
第三步,点击第一帧,打开“动作”,编辑第一帧的动作。这里笔者建议新建一个层,并且取名为action,我们的ActionScript语句主要都写在这里,不过因为这个例子中只有一帧、一层,所以没有关系。
在“动作”中编写帧的动作,在笔者完成的动画中,物体的运动基本上都是在这里编写的。这个例子的程序如下:
var g=100,v0=50;
//定义重力加速度的值和初速度,因为本例中将场景中的10个像素当做实际中的一米,//所以其实定义的是g=10m/s2,v0=5m/s;当然这两个值可以随意定义,也可以在动画中另//外赋值。
function btn_start(){ //定义start_btn按下时的动作
st=1; //新建一变量并赋值为1,作为开始的指令
t0=t; //读取按钮按下时的时刻,在动画中有一个时间参数t
ball_x0=getProperty("ball",_x); //读取当时小球在x方向上的位置
ball_y0=getProperty("ball",_y); //读取当时小球在y方向上的位置
}
function updateTimer():Void {
//时间更新函数,这个函数是整个动画的关键,每更新一次时间,便计算一次物体的位
//置,这样便可以使物体的动作符合我们给它制定的规律。也就是在这里,我们赋予了
//物体运动规律,以使它遵守物理规律!
t= getTimer()/1000; //读取从打开动画到此刻的时间,因为它的单位是ms,所
//以这里除了1000
if(st==1) //如果按钮按下
{
t1=t-t0; //t1为此刻与按钮按下时刻的时间间隔
ball_x=ball_x0+v0*t1; //计算物体此刻的x位置
ball_y=ball_y0+g*t1*t1/2; //计算物体此刻的y位置
setProperty("ball",_x,ball_x); //使物体的在x上位于我们计算出来的位置处
setProperty("ball",_y,ball_y); //使物体的在y上位于我们计算出来的位置处
}
}
var intervalID:Number = setInterval(updateTimer, 100); //设定时间更新频率,
//这里是每100ms更新一次
start_btn.onPress=btn_start; //start_btn按钮按下时运行函数btn_start
到这里,整个动画便制作完毕。我们不难发现,整个动画只有一帧,而且几乎所有的运动规律都是在function updateTimer()这个函数里完成。其实,我们也可以看到笔者制作的想法,用updateTimer()给与整个场景一个时间,就像真实世界里的时间的流动。当然真实世界里时间的流动是连续的,而我们这里是用var intervalID:Number = setInterval(updateTimer, 100)这句函数来定义的,当然我们为了使运动更加流畅,可以使更新时间短一些。有了时间,我们便可以赋予场景中的物体以运动规律,使它符合物理规律。比如这里的“ball_x=ball_x0+v0*t1” 和“ball_y=ball_y0+g*t1*t1/2”,便是平抛运动里水平方向上做匀速直线运动,竖直方向上做自由落体运动的规律。当然,除了平抛运动,我们也可以编写各种物理学里的运动规律,甚至是一些变加速的运动,总之,只要我们能找到这个物体的运动规律,我们便可以在我们的动画里让物体按照给定的规律运动,在这里笔者便不再一一列举。
有了flash中强大的ActionScript,我们便可以发挥我们的想象力,赋予我们的物理动画课件以新的生命。课件不仅仅是上课时的演示,更可以是真实世界的反映,甚至可以在动画中创造出新的“世界”,并且让我们的学生参与进来,这样,不仅可以大大丰富我们的课堂,而且也可以增加学生的兴趣。这便是笔者的一些简单的想法,拿出来和大家一起交流,希望能得到批评和指正。