Flash让弹簧振子振动起来

时间:2022-09-26 01:51:38

Flash让弹簧振子振动起来

一、设计预演效果

要避免制作课件过程的盲目性,做到省时高效,最好能在制作课件前将要实现的演示效果书面化。

笔者希望通过Flash实现的效果是让小球实体在平衡位置O点左右来回振动,振动过程中作变加速运动,且弹簧实体的长度也要随之变化,给人的视觉效果就是弹簧使小球做往复运动。合力(或者加速度)实体和速度实体同步显示相关物理量大小和方向。同时,为了让课件具有交互性,并能留给学生思考研究的空间,可以通过按钮控制合力(或者加速度)实体和速度实体的显示或隐藏,还可以通过图1左下角的一系列按钮改变小球质量、弹簧的劲度系数、最大形变量(振幅)的大小,引导学生观察不同变化情况下小球的振动,进而研究小球的振动周期与哪些因素有关、有什么关系。

二、素材的制作

根据构思确定需要哪些素材。从图1可以看出需要两类素材:影片剪辑实体和按钮实体。其中,弹簧实体、小球实体、合力实体和速度实体属影片剪辑,需要另行分别制作。按钮实体可以直接通过“窗口 公用库 按钮”找到。

在Flash的编辑窗口,依次打开“插入”“新建组件”“创建新元件”,在弹出的“创建新元件”属性对话框中,素材的性质应设成“影片剪辑”(图2)。在制作“弹簧实体”时,屏幕上的坐标原点就是中心位置,应从中心位置开始画折线,形成一个水平放置的弹簧(图3)。

这时弹簧实体已在库中,通过“窗口 库 影片剪辑”,就可以在影片剪辑列表中看到名称为“弹簧实体”的影片,将名称为“弹簧实体”的影片拖到场景中,点击工具栏左上角的箭头按钮,选中场景中的“弹簧实体”,点击工具栏右下角的缩放按钮,改变弹簧实体的大小。制作其他影片剪辑实体与制作“弹簧实体”相似,在制作小球实体组件时,要让球心与编辑窗口中的中心位置重合。制作合力实体和速度实体时,将箭头与编辑窗口的中心位置重合。

三、程序设计

在图4“Action”图层中设置程序。要在某一帧设置程序,需将鼠标移至该帧,单击鼠标右键弹出下拉菜单,单击“动作”选项(图5),即可进入动作设置属性对话框进行程序设置(图6)。

1.主体程序

(1) 在Action图层(图4)的第一帧设定初始参数

x0 = 392;//图1中振子平衡位置O点的横坐标

x1 = 532;//图1中B点的横坐标

y0 = 88;//弹簧振子和小球实体的纵坐标

v0 = 0;//小球的初始速度

p1 = 74;//图1中弹簧固定点的横坐标

zhi1 = false;

zhi2 = false;//“zhi1”和“zhi2”是两个逻辑变量,初始布尔值是False

m = 2000;//表示小球的质量

k = 0.01;//表示弹簧的劲度系数

play();

(2)在第三帧设定下列参数

t0 = getTimer();//表示获取程序执行第三帧时的时间

m2 = x0;//合力实体的横坐标

n2 = Number(y0)+100;//合力实体的纵坐标

m3 = x0;//速度实体的横坐标

n3 = Number(y0)+200;//速度实体的纵坐标

(3)在第四帧设置程序

x0 = 392;

t1 = getTimer();

y1 = y0;

t = t1-t0;

x = x1-x0;

f = k*x/10;

a = f/m;

v0 = Number(v0)+Number(a*t);

s = v0*t;

x1 = x1-s;

//伴随时间发生变化,可以由动力学知识和运动学知识计算出小球位置坐标,速度、位移和受力都在随时间的变化而变化。

setProperty("/小球", _x, x1);//根据计算出的坐标确定小球应处的位置

p = (x1-p1)/(x0-p1);

setProperty("/弹簧", _xscale, p*100);//根据小球的位置设定弹簧实体x轴方向的放大比例,使弹簧右端随时和小球中心重合。这样给人的视觉是弹簧带动小球在振动。

n = (x1-x0)/120;

if (Number(n)>0) {

setProperty("/合力", _xscale, n*100);

setProperty("/合力", _x, m2);

setProperty("/合力", _y, n2);

setProperty("/合力1", _alpha, 0);

setProperty("/合力", _alpha, 100);

} else {

setProperty("/合力1", _xscale, (x0-x1)/1.2);

setProperty("/合力1", _x, m2);

setProperty("/合力1", _y, n2);

setProperty("/合力", _alpha, 0);

setProperty("/合力1", _alpha, 100);

}

//将合力实体复制,把复制的合力实体水平翻转并命名为“合力1”。用这两个实体分别表示振子在平衡位置两边所受合力的方向,其长短的变化表示合力大小的变化。实体长短的变化由位移x1-x0的绝对值来决定。当振动小球位于平衡位置右边时,合力实体的alpha值设为0,即不透明,合力1实体设成透明;当小球位于平衡位置左边时,情况相反。

if (Number(v0)>0) {

setProperty("/速度", _xscale, v0*1000);

setProperty("/速度", _x, m3);

setProperty("/速度", _y, n3);

setProperty("/速度", _alpha, 100);

setProperty("/速度1", _alpha, 0);

} else {

setProperty("/速度", _alpha, 0);

setProperty("/速度1", _alpha, 100);

setProperty("/速度1", _xscale, v0*1000);

setProperty("/速度1", _x, m3);

setProperty("/速度1", _y, n3);

}

//关于速度的显示与上文所述合力的显示雷同。

x1 = getProperty("/小球", _x);

gotoAndPlay(3);//将实体小球的横坐标值赋给变量x1并返回第三帧,循环执行第四帧的程序

2.交互性设置

on (release) {

setProperty("/合力", _visible, zhi1);

setProperty("/合力1", _visible, zhi1);

zhi1 = not zhi1;

}

//对合力实体显示与否由逻辑判断来决定。逻辑变量zhi1的值是True时,就显示合力,是False就隐藏。每按一次“显示/隐藏”按钮,逻辑值变一次,从而达到控制显示与隐藏

on (release) {

setProperty("/速度", _visible, zhi2);

setProperty("/速度1", _visible, zhi2);

zhi2 = not zhi2;

}

//对速度的显示与隐藏和合力实体的交互性设置雷同,也是由逻辑判断来决定的

On (Release)

Set Variable: "m" = 6000

End On

//小球质量变大按钮的动作设置

On (Release)

Set Variable: "m" = 500

End On

//小球质量变小按钮的动作设置

On (Release)

Set Variable: "k" = 0.04

End On

//弹簧劲度系数变大按钮的动作设置

On (Release)

Set Variable: "k" = 0.005

End On

//弹簧劲度系数变小按钮的动作设置

On (Release)

Set Variable: "x1" = 550

End On

//弹簧形变量变大按钮的动作设置

On (Release)

Set Variable: "x1" = 470

End On

//弹簧形变量变小按钮的动作设置

On (Release)

Go to and Play (1)

End On

//对复原播放按钮的动作设置

On (Release)

Stop

End On

//对暂停按钮的动作设置

On (Release)

Go to and Stop (5)

End On

//下一页按钮的动作设置

除了上述按钮交互设置,还可以根据教学的需要把教材的练习用文本框来表示。这些文本框都可以通过输入文字达到交互的目的,以此激发学生学习兴趣。

四、导出动画

制作完毕,设定动画的播放速度,建议值为120帧/秒,以保证动画效果是连续的。最后需要将文件以动画形式导出,点击“文件”下拉菜单中“导出动画”选项,在弹出的保存动画中输入一个文件名并确定,这样一个以SWF为扩展名的文件便生成了。当你打开这个新文件时,就可以看到振动着的弹簧振子了。

上一篇:在Flash中调用Date对象 下一篇:巧用Flash 5制作温度计动态课件