用Flash做物理课件之横波与纵波

分析

本例中,我们使用一个个单独的小球表示质点,屏幕上每100像素代表实际中的1米,在横轴上每100像素分布20个质点,即每两个小球之间相距5像素,从原点开始依次编号为p0、p1……。为了动画的连续性,我们把帧频设为25fps,那么每帧就是0.04秒。

各小球各自的位移表达式为s(t)=s0+100A·cos(2πf·t+φ0),其中A为质点的振幅(单位为米),f为振动频率,s0为平衡位置,对于横波所有的质点都为0;对于纵波,第i个小球就在横坐标为5i像素处。横波质点的s就是其纵坐标;纵波质点的s是其横坐标与平衡位置横坐标之间的差。设置一计数变量n,每隔一帧n增加1,那么t=0.04n,则2πf·t=0.08π·f·n。

对于初相位φ0,当波长为L米即100L像素的时候,i号小球与0号小球之间的距离为5i像素,那么i号小球的振动滞后0号小球5i/100L个周期即相位差Δφ=-2π·5i/100L=-i·π/10L(负号表示振动滞后),设0号小球的初相位为0,那么上式就是第i号小球的初相位表达式。

元件制作及程序编写

1.首先绘制一个影片剪辑元件(以下简称MC)Particle作为质点(图1)

新建MC元件Wave1用以实现横波波动效果,把绘制好的Particle拖入其中,调节其大小为4×4像素(图2中被放大,以便读者看清),x、y坐标分别设置为-2、-2,使之位于中央,命名为p0。并从共享库中引用3个播放控制按钮,分别作为连续播放、单步播放、暂停的控制按钮。

2.输入Wave1的第一帧的帧动作:

for(i=1;i<=80;i++){
	duplicateMovieClip(p0,"p"+i,i);//复制出80个质点

this["p"+i]._x=this["p"+(i-1)]._x+5;//设置质点位置 }   //将第0个与第40个质点放大以便观察其运动状态 p0._width=15; p0._height=15; p40._width=10; p40._height=10;

连续播放按钮的脚本:

on (release){
    play();
}

单步播放按钮的脚本: 钮的脚本:

n+=1;//下一时刻的运动状态

refresh(n);//调用第2帧中的refresh函数来更新图像

stop();  

}

 暂停按钮的脚本:钮的脚本:

 on (release){

  stop();

 }  

在Wave1的时间线点击第2帧处,按F6新建关键帧,输入该帧的帧动作:

refresh(n);

n++;

function refresh(num) {

for(i=0;i<=80;i++)

{ //从上一层的元件(_parent)处读取振幅a、频率f和波长wl并设置第i个质点的位置

this["p"+i]._y=_parent.a*100*Math.cos(0.08*Math.PI*num*_parent.f-i*Math.PI/(10*_parent.wl));

}  

}

同同样在第3帧新建关键帧,输入该帧的帧动作:

gotoAndPlay(2);

3.新建MC元件“横波”,选择“文件”菜单,将上一期制作的包含若干元件的文件“以库打开”,并将“滑块”目录整个拖进本文件的库中。将“滑块”目录下的Slider主元件拖进“横波”元件中(3次),建立3个滑块分别控制振幅、频率、波速,在属性栏将3个滑块分别命名为s1、s2、s3,并使用文字工具画出一个动态文本框,在属性栏将它与wl变量关联。画出坐标轴,注意每100像素表示1米刻度。并把Wave1控件引入,务必使Wave1当中的Particle处于坐标原点。添加必要的说明文字。布置好的“横波”如图3所示。

“横波”第1帧的帧动作:

 //设定初始值

s1.iniv=0.3;

s1.vmax=0.6;

s2.iniv=1;

s2.vmax=5;

s3.iniv=2;

s3.vmax=10;

在第2帧新建关键帧,并输入帧动作:

///根据滑块的值更新各变量

a=s1.Val;

f=s2.Val;

wl=s3.Val/f;//波长=波速/频率

在第3帧新建关键帧,并输入帧动作:

gotoAndPlay(2);

“纵波”元件的制作与“横波”元件基本相同。将元件Wave1复制一份,命名为Wave2,进入Wave2将第2帧的脚本改为:

refresh(n);

n++;

function refresh(num) {

for(i=0;i<=80;i++){

 this["p"+i]._x=i*5+_parent.a*100*Math.cos(0.08*Math.PI*num*_parent.f-i*Math.PI/(10*_parent.wl));

}

}

将“横波”元件复制一份,命名为“纵波”。

4.进入“纵波”元件,右击其中的Wave1元件,选择“交换元件”,将它换成Wave2。将“纵波”的第2、3帧中的Wave1元件也都换成Wave2。并修改坐标轴的样式和位置以及说明文字(图4)。   

回到主场景,在第一帧绘制好封面,并输入该帧的脚本:

stop();

并制作两个按钮元件,分别用于进入横波与纵波的演示,放进主场景第1帧(图5)。   

要点提示

本例中由于涉及两个不同的项目,分别制作了两个分离的元件“横波”与“纵波”,这两个元件分别囊括了实现横波与纵波演示的所有要素,故主场景中有3帧,第一帧是封面,第2帧放置“横波”元件,第3帧放置“纵波”元件,当按下封面上的选择按钮的时候,使用gotoAndStop语句显示对应的帧,并停留在那一帧,剩下的动画效果就是元件内部的事情了。

 提示:这种思想可以被广泛应用,凡是需要有多个彼此独立的效果存在于同一个课件中,就可以把它们分别做成独立的元件,然后放置于主场景中不同的帧,并在课件主菜单的按钮设置跳转到特定的帧并停止在那一帧。

 “横波”按钮的脚本:

on(release){
gotoAndStop(2);
}
					

“纵波”按钮的脚本:

on (release){
	gotoAndStop(3);
}

在主场景第2帧新建空白关键帧,并引入“横波”元件和一个按钮元件,用以跳回第1帧。该按钮的脚本:

on(release){

gotoAndStop(1);

}

在主场景第3帧新建空白关键帧,引入“纵波”元件和同样的一个按钮。

至此,本课件已全部完成。。

总结

制作课件之前一定要先理清思路;把效果做成元件这种模块化开发的思想能够使课件条理清晰,发布时考虑发布成Exe格式,增强通用性;使用之前要彻底测试检查。另外,还要根据教室机器条件调节好影片尺寸和帧频,等等。 


发布时间:2008/6/17 上午8:01:39  阅读次数:13106

2006 - 2024,推荐分辨率 1024*768 以上,推荐浏览器 Chrome、Edge 等现代浏览器,截止 2021 年 12 月 5 日的访问次数:1872 万 9823 站长邮箱

沪 ICP 备 18037240 号-1

沪公网安备 31011002002865 号