当前位置:首页 >> 高中教育 >> 用Flash做课件

用Flash做课件


用Flash 做物理课件
Flash MX 以其良好的矢量绘图功能和改进的 Action Script 脚本语 言,成为实验性学科制作课件的首选。一般来说,一个 Flash 课件需要经 历以下步骤来制作: 1.原理分析(建模) 2.结构规划 3.计算机上模似过程分析及运算 4.元件准备 5.程序设计 6.调试、发布

一:平抛运动
1.分析

和计算 平抛运动是水平方向的匀速直线运动和竖直方向的自由落体运动两个 运动的合成。由于计算机上的显示不是连续的,所以要通过“帧”来定位。 现在进行模似计算。匀速运动很好办,速度不变,每帧的位移也是常 数。 取屏幕上每 10 像素代表 1 米,那么在通常的 800*600 分辨率下我们使 用当中的 700*500 像素。也就是相当于下落 50 米。为了便于观察,时间 t 将被放大两倍。设屏幕上的自由落体运动加速度为 a,我们可以列方程为: gt2/2=50 a(2t)2/2=500 解得 a=24.5 像素/秒 2 又由于我们的帧频是 20,也就是每帧 0.05 秒,每隔一帧改变小球位置

1

的代码被执行一次,得到每一帧的加速度为 24.5*0.052=0.0625 像素/帧2 以帧为单位时间,这也就是每帧位移的变化量。 2.要点提示 重要的语句: (1).复制影片剪辑,创建一个新的引用 duplicateMovieClip ( 〈原对象〉 〈复制后的名称〉 〈在场景中 , , 的层次〉; ) (2) .在场景或者剪辑中,移动画图的起始点。 (this 代表当前剪辑或 场景,还可以用_root 指向主场景) this.moveTo(x,y) 以(x,y)为终点画直线 this.lineTo(x,y) (3).改变对象属性 setProperty ( 〈对象〉〈要改变的属性项目名称〉〈目标属性值〉; , , ) 这里用到了_x,_y,_alpha 属性,分别代表元件的横坐标、纵坐标和不透 明。 3.元件及场景准备 将影片背景设为深蓝色#000099,帧频设为 fps,大小 700*500。 新建一个影片剪辑元件,在中央画一个小球,使用渐变色填冲增强立 体感。 第一帧:打上一个标题,并从共享库引入一个 play 按钮。 第二帧:引入一个播放按钮、一个倒带按钮,在属性栏中将其名称

2

(Instance Name)分别命名为 bplay 和 back:用文字工具画一个文本框, 在属性栏中将它改为“动态文本” ,在关联变量一栏中填入 t。从库中把小 球拖到场景中创建一个对该剪辑的引用,命名为 b1,大小为 12*12,X 坐标 为 100,Y 坐标为 6(是该帧的左上角) 。 第三帧:空白帧。 4.程序编写 建议使用“专家”模式(单击“动作”窗口中的按钮转换) 。在 Action Script 中,setProperty,on,release 这些关键词是区分大小写的,其它 的诸如变量名、影片剪辑名称等则不必区分。 单击时间线中的第一帧,在动作窗口中输入第一帧的脚本: (//后为 注释) stop(); xp=100; yp=6;//初始化位置变量 单击选中按钮,在动作窗口中输入脚本: on (release) { gotoAndStop(2); } 第二帧的脚本: v+=0.0625;//速度的增加 setProperty("b1", _x, xp+4); setProperty("b1", _y, yp+v); //改变小球位置

3

setProperty("back",_alpha,0) //隐藏倒带按钮 yp=b1._y; xp=b1._x;//记录下当前位置 if (yp>=500) {//如果超出边界则停止 stop(); setProperty("back",_alpha,100);//使重播按钮可见 } if (n%4==2) { //每 4 帧(0.2 秒,现实中的 0.1 秒)进行一次“频闪照相” t=n*0.025; //刷新计时器 duplicateMovieClip(b1,"b"+n,n); 作为序号以区别 setProperty("b"+n,_x,112); setProperty("b"+n,_y,b1._y); //记录竖直方向的运动轨迹 //复制一个小球的形象,加上 n

duplicateMovieClip(b1,"c"+n,n-1); setProperty("c"+n,_x,b1._x); setProperty("c"+n,_y,b1._y); //记录平抛小球的运动轨迹

duplicateMovieClip(b1,"d"+n,n+1);//n+1 和 n-1 区别了不同的层 setProperty("d"+n,_x,b1._x); setProperty("d"+n,_y,5); //记录水平方向的运动轨迹

this.lineStyle(1,0xFFFFFF,50); //定义线的粗细、颜色和透明度 this.moveTo (0,b1._y); this.lineTo(b1._x,b1._y);

4

this.moveTo(b1._x,0); this.lineTo(b1._x,b1._y); } n++;//计数器计数 “播放”按钮的脚本: on (release) { gotoAndPlay(3); } “倒带”按钮的脚本: on (release) { back._alpha=0//隐藏倒带按钮 this.clear();//清除网格 for (var i=2;i<=n;i+=4) { removeMovieClip("b"+i); removeMovieClip("c"+i); removeMovieClip("d"+i);//删除纪录的运动轨迹 } xp=100; yp=6; n=0; t=0; v=0; //画出网格线

5

setProperty("b1",_x,108); setProperty("b1",_y,6); //初始化各变量与小球 setProperty("bplay",_alpha,100);//显示“播放”按钮 } 第三帧的脚本: gotoAndPlay(2); setProperty("bplay",_alpha,0);

二.力的合成与分解
分析: 由于力是典型的矢量,在计算机中模似的时候,我们需要用坐标来表 示力的矢量。 设力 F1 的终点坐标为(x1,y1) 2 的终点坐标为(x2,y2) ,F ,合力 F 的终点坐标为(x,y) 。我们规定以影片剪辑元件的中心为原点和所有力的 始点,那么力的坐标就等于其终点坐标。 根据矢量运算法则有: 力的合成:X1+X2=X;Y1+Y2=Y 根据两点间距离公式,力的大小 F F1 与 F 的夹角余弦值 cosθ = 元件的制作及程序编写 在主场景中, 将影片尺寸改为 620*500, 在时间轴中选中第 1 帧, “动 在
6

?
?

X

2

?Y

2

F1* F F1* F

X ! X ? Y 1Y X1 ? Y! *
2 2

X

2

?Y

2

作”窗口中输入脚本(其中,draging 变量指示是否在拖拽中,ondrg 变量 指示正在拖拽哪一个力,1 为 F1,2 为 F2,0 为合力) : draging=false;//draging 变量指示是否在拖拽中 ondrg=0; //ondrg 变量指示正在拖拽哪一个力 //初始化变量 制作三个影片剪辑元件 Arrow1、Arrow0、Arrow2,分别标以不同的颜 色, 并记下它们的颜色号 (以便在后面的画线的时候保证颜色一致) 注意: 。 务必使箭头有颜色填充的部分位于影片剪辑的中心处,否则拖动时会出现 问题。 新建人下影片剪辑 Main,把刚才画好的三个元件依次拖进去,并在属 性栏中分别命名为 a1、 ar、 a2。 在下方用文字工具画一个约为 “动态文本” , 字号设为 19, 并在属性栏 “变量” (Variable) 框中填入 prompt “prompt” (与 变量关联) 。 选中 ar,在动作窗口中输入其脚本: on (press){ startDrag(ar,true);//当鼠标按下时开始拖拽 _root.draging=true;//改变标记变量为正在拖拽 _root.ondrg=0;//指示拖拽的是合力 } on(release){ stopDrag();//当鼠标释放时停止拖拽 _root.draging=false;//改变标记变量为已停止拖拽

7

} a1 的脚本: on (press){ startDrag(a1,true); _root.draging=true; _root.ondrg=1; } on(release){ stopDrag(); _root.draging=false; } a2 的脚本: on (press){ startDrag(a2,true); _root.draging=true; _root.ondrg=2; } on(release){ stopDrag(); _root.draging=false; } Main 元件第 1 帧的动作脚本:

8

reDraw(); function reDraw(){//定义重画矢量平行四边形的函数 fac=180/Math.PI;//定义角弧度转换因数 if (_root.ondrg<>2) {//如果不是在拖拽 F2 a2._x=ar._x-a1._x; a2._y=ar._y-a1._y; } else//如果拖拽的是 F2 { ar._x=a1._x+a2._x; ar._y=a1._y+a2._y; } a1._rotation=Math.atan2(a1._y,a1._x)*fac; ar._rotation=Math.atan2(ar._y,ar._x)*fac; a2._rotation=Math.atan2(a2._y,a2._x)*fac; //将箭头根据力的角度转向 with (this) { //声明下面的操作对象为本元件 clear(); beginFill (0x99CCFF,50);//开始填充 F1 与合力之间的区域 lineStyle(3.5,0xFF9900,100); //使用与 ar 相同的颜色 moveTo(0,0); lineTo(ar._x,ar._y)

9

//画合力 lineStyle(3.5,0xFF3300,100); //使用与 a1 相同的颜色 moveTo(0,0); lineTo(a1._x,a1._y) //画 F1 lineStyle(1,0x0099FF,100); lineTo(ar._x,ar._y); //画合力与 F1 终点的连线 endFill();//至此,以上三条线构成的封闭图形已被填充 beginFill (0xFFFFCC,50);//开始填充 F2 与合力之间的区域 lineStyle(3.5,0x33CC66,100); //使用与 a2 相同的颜色 moveTo(0,0); lineTo(a2._x,a2._y) //画 F2 lineStyle(1,0xFFCC00,100); lineTo(ar._x,ar._y);//画合力与 F2 终点的连线 endFill();//完成填充 } f1=Math.sqrt(a1._x*a1._x+a1._y*a1._y)/10; f2=Math.sqrt(a2._x*a2._x+a2._y*a2._y)/10; fr=Math.sqrt(ar._x*ar._x+ar._y*ar._y)/10; //根据两点间距离公式计算力的大小,每 10 像素代表 1 牛顿

10

ang1=Math.acos((a1._x*ar._x+a1._y*ar._y)/(Math.sqrt(a1._x*a1._x+ a1._y*a1._y)*Math.sqrt(ar._x*ar._x+ar._y*ar._y)))*fac; ang2=Math.acos((a2._x*ar._x+a2._y*ar._y)/(Math.sqrt(a2._x*a2._x+ a2._y*a2._y)*Math.sqrt(ar._x*ar._x+ar._y*ar._y)))*fac; //分别计算 F1、F2 与合力的夹角 prompt="F1="+f1+"N 角 ="+ang1+" ° F2="+f2+"N F 合="+fr+"N\rF1 与合力夹

F2 与 合 力 夹 角 ="+ang2+" ° \rF1 与 F2 夹 角

="+(ang1+ang2)+"°"; //输出提示信息,\r 为换行符号 } 在元件的时间轴中选中第 2、3 帧的位置,按 F6 新建关键帧。 第 2 帧的脚本: if (_root.draging){//如果在拖拽中那么重画 reDraw(); } 第 3 帧的脚本: gotoAndPlay(2); 最后,把 Main 元件拖进主场景中,并加上文字说明和标题。 使用说明: 1.拖动F1 末端不改变合力,相应改变 F2 2.拖动合力末端不改变 F1,相应改变 F2 3.拖动F2 末端不改变 F1,相应改变合力。

11

三.布朗运动
为了能够真实地表现在显微镜下看到的布朗运动(为了节省演示时间 可以将速度加快) ,我们需要构建若干炭粒各自的随机运动,然后再让这些 炭粒随机地分布,并随机地改变大小、旋转角度,这样,整个运动完全随 机,而不是人为操纵的。 另外,还要能够每隔一段时间记录炭粒的路径,用以说明教材中布朗 运动轨迹图的来历,并说明该轨迹图并不是精确的轨迹。这就需要借助画 线语句。幸运的是,AS 中每画完一条线,画图笔头就会自动移动到线的末 端,这就为本例提供了极大的方便。 要点提示: (1) .Math.Random() 这个函数是本例中基本函数,没有参数,功能是产生一个 0 ~ 1 这间 的随机数,那么,如果要产生任意给定的实数(a,b)间的一个数该怎么办 呢?我们可以使用这条发展了的语句: M=Math.Random()*(b-a)+a 其中 M 为待赋随机值的变量,且。例如要产生一个(-15,3)间的随 机数,就应该写 M=Math.Random()*45-15。 (2) .用户组件 CheckBox 的使用 在 Windows 应用程序中我们经常看到复选框这种控制元件,Flash MX 也提供了这种控件。 “Ctrl+F7” “组件” 按 打开 面板, 可以找到期 “CheckBox” 。 拖拽一个 CheckBox 进入场景,观察属性栏。 在最左侧的文本框中,可以改变组件的名称或者改变一个元件名称。

12

在右侧的参数面板中(或按“Alt+F7”打开 Component Parameters 组件参 数面板)有若干可供设置参数,意义如下: Label:设置复选框的文字提示标签 Initial Value:设置复选框的初始值(选中或末选中) Label Placement:设置文字标签是放在复选框左侧还是右侧 Change Handler:当鼠标点击复选框改变其值时,触发的函数的名称 CheckBox:组件的常用方法。

元件制作及编写程序
1. 新建一个影片剪辑元件 Circle, 在其中央画一个蓝色的线宽为 1.5, 和 12*12 的无填冲圆圈,用以在追踪路径时突出显示碳粒。 2.新建影片剪辑元件 Granule 在其中央画一个 7.5*7.5 的炭粒,并把 刚格画好的 Circle 组件拖入其中央与炭粒的中心对齐,在属性栏中将它命 名为 c1,并将其“颜色”的“Alpha”值设为 0,使它不可见。 3.新建组件 Movement(单独炭粒的运动) ,将 Granule 拖入其中央, 点击时间轴第一帧,输入动作脚本(注意是第一帧的运作) ,不是 Granule 组件的动作) : n++; p00._x+=Math.random()*30-15;//随机移动-15 到 15 像素 p00._y+=Math.random()*30-15; p00._rotation+=Math.random()*120-60;//随机旋转-60 到 60 度 if (this._name=="p100"){//如果这一个组件的实例是要追踪的那一

13

个 if (_root.CheckBox1.getValue()==true){//如果主场景中“记录 路径”复选框被选中 p00.c1._alpha=90;//显示圆圈 if(n%12==0){//每隔 12 帧(1 秒)记录一次路径 this.lineStyle(2,0xFF0000,50); this.lineTo(p00._x,p00._y); } }else{ this.clear();//清除记录的路径 n=0; p00.c1._alpha=0;//隐藏圆圈 } if(n%12==0){//更新记录笔头的位置 moveTo(p00._x,p00._y); } } //如果偏离得太远那么强制其回头 if (p00._x>150){ p00._x-=20; } if (p00._y>150){

14

p00._y-=20; } if (p00._x<-150){ p00._x+=20; } if (p00._y<-150){ p00._y+=20; } 4.在时间轴中点击第二帧的位置,按 F6 新建关键帧。输入第二帧的 脚本: gotoAndPlay(1); 5.新建一个影片剪辑元件 Main,将 Movement 组件拖入其中央,输入 第一帧的脚本: for(i=1;i<=99;i++){ duplicateMovieClip(p0,"p"+i,i);//复制出前 99 个运动的炭粒实 例 with(this["p"+i]){//随机设置其位置、旋转角度及大小 _x=Math.random()*400-200; _y=Math.random()*400-200; _rotation=Math.random()*360-180; p00._width=Math.random()*10; p00._height=p00._width;

15

} } for (i=-200;i<=200;i+=20){//画出网格线 this.lineStyle(1,0x000000,20); this.moveTo(i,-200); this.lineTo(i,200); this.moveTo(-200,i); this.lineTo(200,i); } duplicateMovieClip(p0,"p100",100);//复制出供追踪路径的那一个 炭粒 with (p100) { _x=Math.random()*20-10;//为便于观察,起始位置在视野中央附近 _y=Math.random()*20-10; p00._width=15;//突出该炭粒的大小 p00._height=15; } 6.元件的制作至此完成。回到主场景,将影片大小改为 700*500。把 Main 组件拖入第一层中央。 7.在该层上方新建一个图层,在该层中央画一个实心圆,务必使圆的 中心对齐 Main 组件中心[由于 Main 组件被遮住,故需先记下其坐标,然后 将其横、纵坐标分别减去 194(=400÷2-12÷2)即得圆的位置纵坐标]。将

16

其边线剪切下来。在时间轴窗口左边的图层栏右击第二层,在弹出快捷菜 单中将它设置为遮罩层。 8. 在第二层的上方新建一个图层, 输入标题文字, 并绘制一个显微镜, 把刚才那个圆的边线粘贴进来并稍作加工作为显微镜下视野的边框。从组 件窗口中引入一个 CheckBox 组件, 在属性栏中将它命名为 CheckBox1, Label 参数设为“记录路径” 。 本例元件按从属关系,由低级到高级的顺序为 Circle∈Granule∈ Movement∈Main 主场景. 主场景的层次及元件安排如图 3 所示。注意主场景中所有的层都只有 一帧。

四.电流表与电压表
在本例的开发中我们体现了模块化编程的思想。虽然 Flash MX 提供了 “组件” (Component)这一功能(事实上一些大型的公用元件也是被封装 为组件来使用) ,但制作一些简单的元件也要做成组件无疑是“杀鸡用牛 刀” 。 我们来分析一下本例子中难度较大的电流表的制作。表盘采用实物照 片. 设定一个”Wonde 变量”用来指示量程,0 时(100 mA 挡)为 0 ~100 mA,1 时(0~500 mA 挡)为经过测量知道指针摆动的范围是-40°~ 40° (以竖直方向为 0°) ,因些指针的偏角=-40+80*电流值÷最大量程。当使 用 100 mA 挡的时候,指针每偏转 1°表示电流变化 1.25 mA;500 挡则为

17

7.25mA。 为了模似指针逐渐摆至指定位置的效果,我们设置一个变量用来储存 目标值(就是下面的 Valset) ,一个变量用来读取当前值(currVal) ,如果 未达到目标值那么根据与目标值之间的距离设定速度逐渐逼渐目标值(这 样有个好处,就是不至于因为变量上小到 0.01 的差距而摆过了头) ,而无 论何时,指示值(currVal)变化的速率是角度变化速率的 1.25(7.25)倍。 为了模似超过量程时的“打表”现象,我们增设一个速度转换因数 (speed) ,在目标值超过量程的时候,目标值=量程÷110%,速度为正常 摆动的 5 倍。 元件的制作及程序编写 1.新建一个影片剪辑(以下简称 MC)元件,名为 Drag。在其中央画 一个滑块,应尽量使其处于正中处。 2.新建 MC 元件 Slider,利用矩形和直线工具画好滑槽和该度。滑槽 的尺寸与位置:W=6,H=212,X=-3,Y=-6。该度线最上面一条的纵坐标应 当为 0。在滑槽的顶端用文本工具画一个文本框,并在属性栏中将它改为动 态文本并与 Val 变量关联。 3.在第一层上方新建一个图层,把 Darg 拖入第二层中,移到滑块顶 端,在属性栏中将它命名为 d1。 4.选中 d1,并写入 d1 的动作脚本: on(press){ //开始拖动,其中后面四个参数依次规定了拖动的左、上、右、下 的范围,本例中使其只能竖直拖动

18

startDrag(d1,true,0,0,0,200); } on(release){ stopDrag();//停止拖动 } 在时间线窗口选择第一层的第 1 帧,并输入其脚本: d1._y=200-iniv/vmax*200;//设定初始位置, 其中 iniv 是初始值, vmax 为 Slider 调节的最大值,可以在外部通过点语法指定 Val=iniv; //刷新显示变量 5.在第一层第 2、3 帧新建关键帧,并输入第 3 帧的脚本: Val=(200-d1._y)*vmax/200;//刷新显示值 gotoAndPlay(2); 6.在第二层的第 3 帧新建一个帧(不是关键帧) ,保证所有的第 3 帧 中 Darg 都可见就行。 至此本元件已完成。建议在库窗口中新建一个目录,把刚刚做的 Darg 和 Slider 都放进去,这样在别的文件中引用的时候把那个目录拖到目标文 件库中去就行了,不会丢失零件。 可调节亮度的小灯泡 这个元件很简单。新建 MC 元件 light,画一个无边框的中间为黄色的 径向渐变填充圆作为光晕。新建 MC 元件 Bulb,画好底座和灯泡,把 light 拖进去放在灯泡上,命名为 l1,Alpha 值调为 65。 并输入 Bulb 第 1 帧的脚本:

19

if(lum<=100){ l1._alpha=lum*0.9; } 在第 2 帧新建关键帧,脚本为: gotoAndPlay(1); 制作电流表 1.新建 MC 元件 Hand,在其中画上指针,注意指针下端与元件中心点 对齐,否则无法绕根部摆动。 2.新建 MC 元件 Ampere Meter,导入电流表的照片,置于正中。在上 方新建图层,把 Hand 拖进去,注意其下端要置于图片上的指针根部。在第 二层的第 3 帧新建一个帧。 3.第一层第 1 帧的脚本: //根据量程设定初始位置 if (wmode==0){ h1._rotation=-40+80*iniv/100; }else{ h1._rotation=-40+80*iniv/500; } currVal=iniv;//iniv 为电流表初始值 Valset=iniv; 在第一层第 2、3 帧新建关键帧。第 3 帧的脚本: if (currVal!=Valset){

20

if (wmode==0){ if (Valset>110){//如果超过量程 Valset=110; //最多指到 110mA 处 speed=0.8;//设定速度因数 }else{//正常摆动 speed=0.16; } curFac=1.25;//设定角度/指示值转换因数 }else if(wmode==1){ if (Valset>550){ Valset=550; speed=0.16;//由于值是 100mA 档的 5 倍, 速度因子则为其 1/5 }else{ speed=0.032; } curFac=7.25; } h1._rotation+=(Valset-currVal)*speed;//指针摆动 currVal+=(Valset-currVal)*speed*curFac;//记录当前指示值 } gotoAndPlay(2); 至此电流表也完成了。把 Hand、Ampere Meter 和背景图放进一个目录

21

中去。如果使用的时候发现位置不对,可以通过移动指针位置来调节直至 准确。 提示:如果要做电压表,只需将上面的元件复制一份,把背景图片换 成电压表,例如当量程为 5V 的时候只要把上面第 3 帧程序中的 Valset 和 speed 缩小为 1/20,10V 时缩小 1/10,并根据图片上摆动范围按一开始讲 的方法改变 curFac 即可。 下面我们来做一个综合应用实例,目的是通过调节滑块来改变加在灯 泡两端的电压改变亮度,并且相应改变电压表、电流表的值。 把做好的电流表 Ampere Meter、电压表 Voltage Meter、滑块 Slider、 灯泡 Bulb(注意是完整的元件,不是零件)拖进主场景,分别命名为 a1、 v1、s1、b1。输入主场景第 1 帧的脚本: s1.vmax=10;//设定滑块最大值 s1.iniv=5;//设定滑块初始值 v1.wmode=0;//设定电压表量程为 0~5V a1.wmode=0;//设定电流表量程为 0~100mA 当然,在其它课件中也可以通过诸如 a1.iniv=50 之类的语句来直接设 定电流表的始值。 在第 2 帧新建关键帧,并输入脚本(假如灯泡电阻为 50Ω ,则电流为 5V/50Ω =0.1A=100mA,毫安数值为电压的 20 倍) : v1.Valset=s1.Val;//v1 指示滑块设定的电压 b1.lum=s1.Val*20; //根据滑块的值设定亮度,亮度最大为 100 a1.Valset=v1.Valset*20;//设定毫安值

22

gotoAndPlay(1); 然后新建一个图层,在上面画上电线,写上说明文字。运行影片,拖 动滑块,可以看到灯泡亮度的变化,而当滑块设定值>5 的时候,可以欣赏 到平时不敢看的打表现象。

五.横波与纵波
我们使用一个个单独的小球表示质点,屏幕上每 100 像素代表实际中 的 1 米,在横轴上每 100 像素分布 20 个质点,即每两个小球之间相距 5 像 素,从原点开始依次编者按号为 p0、p1。为了动画的连续性,我们把帧频 设为 25fps,那么每帧就是 0.04 秒。 各小球各自位移的表达式为 s(t)=s0+100A*cos(2π f*t+Φ 0),其中 A 为质点的振幅(单们为米) 为振幅的频率,s0 为平衡位置,对于横波所 ,f 有的质点都为 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) 。

23

新建 MC 元件 Wavel 用以实现横波波动效果,把绘制好的 Particle 拖入其中,调节其大小为 4*4 像素,坐标分别为-2、-2,使之位于中央, 命名为 p0。并从共享库中引用 3 个播放控制按钮,分别作为连续播放、单 步播放、暂停的控制按钮。 2.输入 Wavel 的第一帧的帧动作: 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(); } 单步播放按钮的脚本: on (release){ n+=1;//下一时刻的运动状态 refresh(n);//调用第 2 帧中的 refresh 函数来更新图像

24

stop(); } 暂停按钮: on (release){ stop(); } 在 Wavel1 的时间线点击第 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 个滑

25

块分别控制振幅、频率、波速,在属性栏将 3 个滑块分别命名为 s1、s2、 s3,并使用文字工具画出一个动态文本框,在属性栏将它与 wl 变量关联。 画出坐标轴,注意每 100 像素表示 1 米刻度。并把 Wavel1 控件引入,务必 使 Wavel1 当中的 Particle 处于坐标原点。添加必要的文字说明。布置好 的“横波”所示。 “横波”第 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); “纵波”元件的制作与“横波”元件基本相同。将元件 Wavel1 复制一 份,命名为 Wavel2,进入 Wavel2 将第 2 帧的脚本改为:

26

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.进入“纵波”元件,右击其中的 Wavel1 元件,选择“交换元件” , 将它换成 Wavel2。 “纵波” 将 的第 2、 帧中的 Wavel1 元件也都换成 Wavel2。 3 并修改坐标轴的样式和位置以及文字说明。 回到主场景,在第一帧绘制好封面,并输入该帧的脚本: stop() ; 并制作两个按钮元件,分别用于进入横波与纵波的演示,放进主场景 第 1 帧。 “横波”按钮的脚本: on(release){ gotoAndStop(2); } “纵波”按钮的脚本: on (release){

27

gotoAndStop(3); } 在主场景第 2 帧新建空白关键帧,并引入“横波”元件和一个按钮元 件,用以跳回第 1 帧。该按钮的脚本: on(release){ gotoAndStop(1); } 在主场景第 3 帧新建空白关键帧,引入“纵波”元件和同样的一个按 钮。至此,本课件已全部完成。

28


更多相关文档:

三种常见做课件软件的比较

我在用 Flash 制作课件的实践中感到, 用 Flash 来制作课件主要有以下几方面的优势: 1、 “身材”纤细 Flash 采用的是流行的矢量技术,用它创作的作品,不但交互...

如何制作flash课件

如何制作flash课件_计划/解决方案_实用文档。如何制作flash课件 引用meng-2011的 如何制作 flash 课件 自从94年我国加入互联网以来,它以千军万马之势风靡全中国。...

如何用flash制作教学课件

如何用 flash 制作教学课件 PowerPoint 虽然有“自定义动画”的 gong 能,但这些动画都因有了固定的模式,往往不能满 足我们的实际需要。因此,有必要利用别的办法...

用Flash制作课件的三个步骤

用Flash制作课件的三个步骤_育儿理论经验_幼儿教育_教育专区。用 Flash 制作课件的三个步骤 一、脚本设计。它是整个课件制作的重要部分,其目的是将教师的教学过程用...

学用FLASH做课件第一讲

用FLASH做课件第一讲_教育学_高等教育_教育专区。学习 学用FLASH 做课件 课件制作流程 一、选择课题;二、确定课件制作初步方案;三、编写课件制作脚本;四、搜集...

教你制作Flash课件的框架

教你制作Flash课件的框架_计算机软件及应用_IT/计算机_专业资料。Flash课件制作 教你制作 Flash 课件的框架 当制作内容多、结构复杂的的课件时,往往感到无从下手,...

用Flash做课件

用Flash做课件_高中教育_教育专区。做课件用Flash 做物理课件 Flash MX 以其良好的矢量绘图功能和改进的 Action Script 脚本语 言,成为实验性学科制作课件的首选。...

flash课件制作的原则与技巧

flash课件制作的原则与技巧_计算机软件及应用_IT/计算机_专业资料。现在, 掌握学习和掌握课件制作技术的老师越来越多, 但是, 在制作应用课件的过程中, 经常会遇到这...

巧学活用flash制作课件

巧学活用flash制作课件_职业技术培训_职业教育_教育专区。你想用最短的时间,掌握最多的Flash制作要点,创作自己的作品吗?巧学活用 flash 制作课件——Flash 培训探...

浅谈Flash课件制作的方法与技巧

浅谈Flash 课件制作的方法与技巧贵州省道真自治县旧城镇关坝小学 朱泽辉 13378522303 摘要 课件制作,是新时代教师们必备的一项基本功。课件的实用 价值取决于课件...
更多相关标签:
怎么用flash做课件 | 如何用flash做课件 | 用flash制作课件 | 如何用flash制作课件 | flash做课件 | flash课件怎么做 | 怎样用flash制作课件 | 利用flash制作课件 |
网站地图

文档资料共享网 nexoncn.com copyright ©right 2010-2020。
文档资料共享网内容来自网络,如有侵犯请联系客服。email:zhit325@126.com