|
模拟机械波动画制作教程
作者:麦长芳 本人是一名高中物理教师,来闪吧也有一段时间了,虽然断断续续,也算学习了一些东西,这里先要感谢各位闪友了。在前一段时间我试做了一个模拟机械波的动画,自我感觉还可以(各位别笑我),我百度了一下,好像还没有相关教程,也想练笔写一个看看,一是为了感谢闪吧,二是献给还在起跑线的各位闪友,特别是高中物理教师,希望各位能更快的进入flash的美妙殿堂,这是我第一次写,如有不足之处,还望见谅,废话少说,下面正式开始。
1.rar (源文件)
机械波.rar (源文件) 一.思路分析 从机械波的形成过程来看,它是由于振动质点通过相互作用力带动与之相邻的质点,通过相邻的点把振动形式传播出去从而形成机械波,这样就必须解决两个问题: 1、每一个质点都按照y=Acos(ωt+φ)的规律振动 2、不是所有的点都同时开始动的,他们有一定的相位差,靠近波源的点先振动。 二、实现方法 这里我只介绍横波的模拟动画。要使得质点振动,我们只需使它的y方向的位移按规律y=Acos(ωt+φ)变化即可,可以用这样的语句实现 this._y=y0+r*Math.cos(j*Math.PI/180+m) 说明:y0是平衡位置的y坐标,所有点的y0都是一样的,ω写成Math.PI/180,是把角度换成弧度制, 三.制作步骤 1、绘制质点小球(电影剪辑)。 进入主场景,选中椭圆工具,设置渐变色,如图1,按住Ctrl键和鼠标左键,在主场景中画出一个小球。
图片附件: [教程] tp1.gif (2006-8-11 10:28, 5.62 K)
选中小球,单击鼠标右键,选择[转换为元件】(或按F8),在弹出的对话框中选择影片剪辑,注册点选在中间,单击【确定】按钮把小球转换为电影剪辑如图2
图片附件: tp2.gif (2006-8-11 10:28, 6.66 K)

选中小球,打开右下角的它的属性面板,命名为my_mc如图3 图片附件: tp3.gif (2006-8-11 11:13, 4.94 K)

2.实现小球的运动 选中小球,打开下方的动作面板,输入脚本, 如图4
图片附件: tp4.gif (2006-8-11 10:28, 8.63 K)

下面我把这段代码作简单解释: onClipEvent (load) {}表示当剪辑显示在时间轴上时,k、r、y0被初始化,其中k的初始化可能会比较难理解,它是把该电影剪辑的名字作为它的值的,而它的名字到底又是什么呢?后面会讲到,它的名字实际上分别是0到N的整数,这样做的目的何在呢?请往下看: onClipEvent (enterFrame) {}是当剪辑显示在时间轴上后,一直重复做的事情 那就是k不断被减2(可以任意数),再用一个if语句判断,如果k<=0成立,开始执行语句this._y = y0+r*Math.sin(k*1.5*Math.PI/180)使小球运动起来,大家可以发现,k越小,越快满足k<=0,也就先动起来,那么我们思路分析中的第二点就可以实现了,所以接下来的问题是给各个质点命名了 3、复制小球。 回到主场景,新建一个层命名为Action,如图5
图片附件: tp5.gif (2006-8-11 10:28, 3.56 K)

选中该层的第一帧,打开动作面板,写入代码,如图6 图片附件: Snap7.gif (2006-8-11 11:04, 6.8 K)

可以看得出,该代码所复制出来的电影剪辑的名称分别是从0到50的数,这下大家明白了吧, 4、哈哈,现在你可以试一试你的成果了,Ctrl+Enter一下,还满意吗? 5、实现控制 要实现对以上机械波的简单控制,,必须把代码改一下: (1)、把onClipEvent (enterFrame) {} 的代码改为 onClipEvent (enterFrame) { if (_parent.c == 0) { if (k<=0) { this._y = y0+r*Math.sin(k*1.5*Math.PI/180); } k=k- 2; } } 可见只是多了一个判断,判断只有满足c == 0,才会执行代码k=k-2,才会产生小球的运动,c自然就在按钮上赋值了。 (2)、再新建一个层,从库中拖入两个按钮放在该层,我们可以在【开始】按钮上加上语句on (release) ,在【暂停】按钮上加上语句on (release) 。 至此,基本完成了,纵波?差不多的啦。最后奉上本教程源程序以及另一个包含纵波的功能相对齐全的机械波源码,供参考
|