徐卫东
平抛运动是物理教学曲线运动的重要实例,直接影响到我们对力与运动关系的理解,影响到我们对带电粒子在电场中偏转的认识和处理。笔者在用Flash打造平抛运动的频闪图片时,有意识地将平抛运动与自由落体运动和匀速运动相对比。
一、平抛运动的实现
平抛运动可以看成是水平方向的匀速运动和竖直方向的自由落体运动的合运动,即
水平方向:;
竖直方向:
首先,确定平抛运动的对象。新建一个MC,绘制一个小球,放到主场景中,实例命名为“ball”,作为实现平抛运动的小球。
其次,对象初始化。在主场景中新建代码层,在第一帧上写下代码:
a = 0.1;
b = 8;
j = 0;
y0 = getProperty("ball",_y);
x0 = getProperty("ball",_x);
stop ();
接下来,实现对象的平抛运动。在代码层第二帧写下代码:
if (i<80) {
y1=y0+a*j*j;
x1=x0+b*j;
setProperty ("ball", _y, y1);
setProperty ("ball", _x, x1);
} else {
stop ();
}
j = j+1;
在代码层第三帧写下代码:
gotoAndPlay (2);
二、频闪图片的实现
频闪图片的特点是在同一张照片上表现出动作的连续性,有很直观的动态感。每次闪光时应听到快门声并同时留下小球到达某一位置的影像。为了实现具有真实感和现场感的频闪图片,我们应完成以下工作:
1.像的位置设置
当对象“ball”运动到某一特定位置时,复制该对象。在代码层的第二帧的条件语句中添加代码:
if ( i==14 or i==29 or i==44 or i==59 or i==74) {
duplicateMovieClip ("ball", "ball"+i, i+100);
setProperty ("ball"+i, _y, y1);
setProperty ("ball"+i, _x, x1);
}
2.光的设置
新建一个MC,绘制一个填充色为白色的矩形,拖到主场景中尽量放大一些。实例命名为“shanguang”(即闪光)。
在代码层的第一帧上添加代码:
setProperty ("shanguang", _alpha, 0);
在代码层的第二帧内层条件语句中添加代码:
setProperty ("shanguang", _alpha, 100);
else {
setProperty ("shanguang ", _alpha, 0);}
3.快门声音的设置
从共享图库中导入快门声音。打开[图库]找到所需的声音剪辑,右键单击选中[连接]。在标识符中填入符号sound1,选中[连接]的[输出此符号]。
在代码层写入控制声音的代码。第一帧实现声音的绑定,代码如下:
mysound = new Sound( );
mysound.attachSound("sound1");
第二帧用以实现声音的循环,添加代码:
mysound.start();
下面所示脚本为平抛运动和由其分解的水平方向匀速运动和竖直方向自由落体运动的频闪图片的源代码:
第一帧代码:
a = 0.1;
b = 10;
i = 0;
y0 = getProperty("ball",_y);
x0 = getProperty("ball",_x);
注意,复制MC时,深度不能相同,否则不能正常显示。
duplicateMovieClip ("ball", "ball0", 1);
duplicateMovieClip ("balla", "balla0", 99);
//“balla”为自由落体小球的实例名
duplicateMovieClip ("ballb", "ballb0", 299);
//“ballb”为匀速直线运动小球实例名
setProperty ("shanguang ", _alpha, 0);
col1 = 0xffff00;
col2 = 0xccff99;
col3 = 0x99cc00;
//三小球图像的颜色各不相同,需要初始化颜色
mysound = new Sound( );
mysound.attachSound("sound1" );
stop ();
第二帧代码:
if (i<80) {
y1=y0+a*i*i;
x1=x0+b*i;
setProperty ("ball", _x, x1);//使“ball”作平抛运动(x,y坐标都变化)
setProperty ("ball", _y, y1);
setProperty ("balla", _y, y1);//使“balla”作自由落体运动(仅y坐标变化)
setProperty ("ballb", _x, x1);//使“ballb”作匀速运动(仅x坐标变化)
zxcol1 = new Color( "ball"+i);
zxcol2 = new Color( "balla"+i);
zxcol3 = new Color( "ballb"+i);
zxcol1.setRGB(col1);
zxcol2.setRGB(col2);
zxcol3.setRGB(col3);//设置三个小球图像的颜色
if ( i==14 or i==29 or i==44 or i==59 or i==74) {
//每隔一定的帧数对三个小球分别复制一个MC,相当于定时频闪。
duplicateMovieClip ("ball0", "ball"+i, i+100);
setProperty ("ball"+i, _y, y1);
setProperty ("ball"+i, _x, x1);
duplicateMovieClip ("balla0", "balla"+i, i+299);
setProperty ("balla"+i, _x, x1);
duplicateMovieClip ("ballb0", "ballb"+i, i);
setProperty ("ballb"+i, _y, y1);
setProperty ("shanguang ", _alpha, 100);
mysound.start(); //闪光时发出快门声
} else {
setProperty ("shanguang ", _alpha, 0);
}
} else {
stop ();
}
i = i+1;
4.闪光图片的清除
当需要重复演示时,必须清除前面复制的MC,用removeMovieClip命令,写入代码:
on (release) {
removeMovieClip ("ball0");
removeMovieClip ("ballb74");
//重新初始化三个小球的位置
setProperty ("ball", _y, y0);
setProperty ("ball", _x, x0);
setProperty ("balla", _y, y0);
setProperty ("balla", _x, x0);
setProperty ("ballb", _y, y0);
setProperty ("ballb", _x, x0);
gotoAndStop (1);