1、Flash ActionScript 编程制作物理课件实例教程第 1 页 共 78 页Flash ActionScript 编程制作物理课件实例教程(内部资料)山东大学 宋洪晓2007 年 4 月Flash ActionScript 编程制作物理课件实例教程第 2 页 共 78 页目录写给自己的话3第一课 细节决定品质Flash 动画制作中的绘图技巧拾遗4第二课 ActionScript 基础10第三课 第一个 ActionScript 编程动画18第四课 数值计算与编程动画实例24第五课 变量的调整与动态复制32第六课 流程控制分支语句38第七课 流程控制循环44第八课 ActionScri
2、pt 语法概述50第九课 常用函数及对象实例62第十课 从构思到制作完整课件制作实例71附录 1:参考书目74附录 2:常见字体变化形式75附录 3:关于字体符号的规定76附录 4:有关物理量和符号的国家标准79Flash ActionScript 编程制作物理课件实例教程第 3 页 共 78 页【写给自己的话】(利用 Flash ActionScript 制作物理课件第一版前言)很久以来就想把在张老师的网络课程物理学项目中积累起来的经验和做的一些有益的探索整理成文字,以纪念那一段逝去的时光和告慰那一番付出的心血。但是却因为各种各样的原因,始终未曾动笔。这个寒假,在女友的催促和鼓励下,终于坐在
3、电脑前面开始了挤牙膏的过程。回想起自己学习 Flash 和跟随何希庆老师、张承琚老师一步步摸索如何利用 Flash 制作物理课件以及与王宁、汤茂建等同学一起学习、探讨 Flash 技术的过程,真的是感慨万千。99 年初的那个寒假第一次看关于 Flash 的入门书;99 年暑假开始在物理学院网站里使用 Flash 制作网站徽标;2000 年 9 月去北京参加新世纪网络课程的立项申请;2001 年暑假在四楼多媒体教室加班制作;2002 年底网络课程项目基本完成直到现在,还能记得第一次见到国外使用 AttachMovie 复制元件的动画,兴奋地探索源文件的情景;还能记得为了三维坐标转换,四处搜索数学
4、公式,抓住张旭逼他计算结果的情景;还能记得用 asv 拆解了台湾王建忍先生的“颜色的叠加”课件,在火车上抱着打印的代码凝思苦想的情景;还能记得绘制曲线时为了解决旋转线段的长度和粗细,在实验室通宵苦苦调试的情景;还能记得暑假里项目组的同学们加班制作课件时,一手拿着盒饭,一手拿着鼠标的情景现在,网络课程物理学 、 物理学(第二版)电子教案已经被高教出版社出版,原来项目组的同学、朋友们也陆续毕业,各奔东西。突然想起罗大佑的歌了:春天的花开秋天的风以及冬天的落阳,忧郁的青春年少的我曾经无知的这么想,风车在四季轮回的歌里它天天地流转,风花雪月的诗句里我在年年的成长谨以本文献给我的老师、同学、朋友们。宋洪
5、晓 2005.1 Flash ActionScript 编程制作物理课件实例教程第 4 页 共 78 页第一课 细节决定品质Flash 动画制作中的绘图技巧拾遗我们在制作 Flash 动画,尤其是 Flash 课件中,需要注意到画面的细节。我们下面通过几个例子,来回顾一下这些我们当初可能一略而过的内容。注意这些细节性的东西,对于提高我们课件制作的水准,还是有非常巨大的意义的。【例 1-1:游标卡尺的刻度绘制 】1、新建 Flash 文档,大小设为 550*400,背景设为白色,帧速 12fps。2、点“插入”菜单, “新建元件” 。名称处填“ruler” ,类型选 “影片剪辑” 。3、在影片剪
6、辑 ruler 内,找到代表中心的“十”字。4、使用铅笔工具 在十字附近绘制一条竖线。使用选择工具 选取这条竖线。点“窗口”菜单,选择“信息”面板。将元件位置 处修改为如下面的右图。5、点“窗口”菜单, “属性”小菜单,选择“属性”面板。如果属性面板是这样没有展开,点击右下角展开按钮 ,将属性面板展开。6、依次将所选线段的属性设为,宽:0.0;高:40.0;X :0.0;Y :20.0。Flash ActionScript 编程制作物理课件实例教程第 5 页 共 78 页7、继续使用线条工具添加第二根、第三根刻度线使用属性面板准确定位,使他们间距为 10 象素,顶端对齐,高度分别为 20、20
7、、20、20、30、20、20、20、20、408、可以用这样的方法绘图效率比较低,我们需要借助一些绘图技巧。点“视图”菜单, “网格”小菜单,“编辑网格” 。选中“显示网格”和“贴紧至网格” ,水平和竖直间距都填“10px” 。保存默认值,确定。此后我们显示网格作为默认的编辑环境。9、显示网格后,我们绘制线段时只需要贴近网格按下鼠标,Flash 就会自动显示一个靠近提示的圆圈,绘制长度和位置整十的线段就变得非常简单了。10、除了一根一根绘制之外,绘制好几根之后,批量复制、粘贴出来的线段使用选择工具整体移动也很方便。11、绘制相当于 6cm 的主尺即可,然后延 0 高度绘制一条水平线。用文本工
8、具添加上刻度。12、新建影片剪辑元件:vernier。在 ruler 中复制一组线段,粘贴到 vernier 中。点窗口菜单,变形。打开变形面板,宽度改为 90,高度 50,旋转,180 度,敲回车。Flash ActionScript 编程制作物理课件实例教程第 6 页 共 78 页13、使用选择工具把变形后的线段左下角移动到影片剪辑 0 点。14、回到主场景,把图层 1 层标签改为 main。点窗口“菜单,库。打开库面板,将 ruler 和 vernier 两个元件分别拖入主场景,使两个实例的注册点在同一直线上。15、保存,发布。同学们课后可自行将游标卡尺的外形线条绘制完成。【例 1-1
9、说明】本例中使用不同的方法绘制(调整)线段的位置,方法繁简程度差别巨大。使用合适的方法进行绘制,可以提高绘图的效率和精度。进行下一个例子之前,我们来重温 一下Flash 中的割断属性。当使用铅笔、钢 笔、线条、椭圆、矩形或刷子工具来绘制一条与另 一条直线或已涂色形状交叉的直线时,重叠直线会在交叉点处分成线段。可以使用“选取“工具来分别选择、移动每条线段并改变其形状。上图分别是一个填充;一条直线穿过的填充;分割形成的两个填充和三条线段。【例 1-2:电表表盘的绘制】1、新建 Flash 文档,大小设为 550*400,背景设为白色,帧速 12fps。 (以后不特 别声明,本讲义中所有的实例均使用
10、此设置。 )Flash ActionScript 编程制作物理课件实例教程第 7 页 共 78 页2、新建影片剪辑元件:dial。在 dial 中绘制一根长 150 象素,底部在中心十字的竖直线。3、选择任意变形工具 ,点击选择线段,将中心点的标志 从中间拖到线段最下角(影片剪辑的中心十字处) ,如右图。4、点“窗口”菜单,变形。打开变形面板,选旋转,10 度。点击右下角的复制并应用变形按钮(图中光标处) 。5、不停点击复制并应用变形按钮,就可依次复制出旋转 10 度、20 度、30 度的线段。6、进行类似 3 到 5 步的操作,复制出向左放旋转的线段。7、选椭圆工具 ,线条颜色选黑色,填充颜
11、色选无(如下左图) ,绘制一个空心圆。注意圆不要与刚刚绘制的线条相交,如下中图。Flash ActionScript 编程制作物理课件实例教程第 8 页 共 78 页8、选选择工具 ,确保选中了刚才绘制的圆,并检查一下信息面板的元件位置选择中心(如上右图) 。打开属性面板,分别填入宽:280;高:280;X :0;Y : 0。9、进行类似 7 到 8 步的操作,绘制宽高分别为 250 和 265 的两个圆。10、使用选择工具 ,分别选取被不需要的部分,一一删除。只保留电表刻度需要的部分。这个操作中如果画面太小不易操作,可使用缩放工具 放大画面。10、使用文本工具 ,给表盘添加刻度和电表标志。下
12、图为放大 200以便鼠标操作。11、保存。这个例子中制作的表盘我们将在后面的例子中用到。【例 1-2 说明】这个例子制作比较繁琐,为了减少工作量,我们制作的刻度比较稀疏,利用类似的方法完全可以制作出刻度稠密的表盘或者欧姆表这样刻度不均匀的表盘来。Flash ActionScript 编程制作物理课件实例教程第 9 页 共 78 页使用变形面板“复制并应用变形”的方法和图像的割断属性相结合的方法,是用来制作旋钮、表盘等旋转部件的绝佳方法,希望同学们认真体会、掌握。【关于字体和字符】Flash 中的字体和字符单独拿出来说明一下,这是因为制作物理课件时,公式、符号是不可缺少的,有的老师、同学制作课件
13、时对公式、字符的标准化注意不够。对于科学符号,国家标准 GB3102-1993 专门作出了详细的规定。如果你的课件想参加评比或者到出版社出版,那么就必须严格遵守国家标准。我们在制作物理学网络课程和大学物理教学资源库过程中,对此印象特别深刻。也领略了出版社审阅编辑的严格、细致和眼光锐利。简单来说,出版物的汉字正文使用宋体,汉字标题可使用黑体或宋体加粗,注释或附录性文字使用楷体或仿宋,其他字体在正文中较少出现。英文正文和阿拉伯数字使用 Times New Roman 字体。公式中的希腊字符,使用 Symbol 字体。为了表示不同的信息,比如人名、专用名次、矢量等,字符可以使用白体、斜体、粗体、粗斜
14、体等不同的变化。为了增加对字体字型的感性认识,附录 2 是字体各种形式的变化。附录 3 是字体变化的规则,和查阅相应的国家标准,附录 4 是关于量和符号的国家标准清单。科技出版社和高教出版社最近几年出版的教材里的字体符号都是经严格审查的,权威性较高,在制作 Flash 动画时如果不能确定字符变化形式,可作为标准参考。另外,word 自带的公式编辑器输入公式和特殊字符也是很规范的,可在公式编辑器编辑公式的状态下全选、复制、粘贴到 Flash 中,这样能够保持矢量字体的可编辑特性。打开公式编辑器的方法是在word 中点插入菜单,对象,在新建对象类型的列表中找到 “Microsoft 公式 3.0”
15、,点确定。Flash ActionScript 编程制作物理课件实例教程第 10 页 共 78 页第二课 ActionScript 基础追溯 Flash ActionScript 的历史要从 Flash 2 开始,经过 Flash 3、Flash 4 的不断发展,Flash 5 开始支持面向对象编程;Flash MX(Flash 的第 6 个版本)就已经发展为比较成熟的面向对象编程语言;Flash MX 2004(Flash 的第 7 个版本)引入了 ActionScript 2.0 的概念,使习惯于在 C+或者 java 下编程的程序员可以在自己熟悉的编程习惯下工作;Flash 8 进一步加
16、强了安全方面的限制;在 Flash 将要发布的下一个版本Flash 9 中,将引入 ActionScript 3.0。Flash ActionScript 版本频繁的升级,在带给我们越来越强大的功能的同时,保持了不错的向下兼容特性,但是或多或少使我们的学习 ActionScript 编程的难度增大了。Flash 中的最基本的 ActionScript 是按钮事件和对影片时间轴进行控制的语句,最初的一些语句从Flash 2 版本起就存在了,因此在 Flash 中有很深远的影响,很多 Flash 的入门书至今也只有这一部分的内容,这当然是远远不够的。Flash 中使用动作面板来输入 ActionS
17、cript 程序,如果动作面板没有打开,我们可以选择“窗口”菜单, “动作” ;或者在需要添加 ActionScript 的帧或实例上点右键菜单,选“动作” ;动作面板的快捷键是F9。打开的动作面板如图。我们直接在“脚本”窗格输入 ActionScript 代码即可。动作面板为我们提供了代码提示、检查语法和标点、自动套用格式、语法加亮显示、脚本助手等很Flash ActionScript 编程制作物理课件实例教程第 11 页 共 78 页多强大的功能。【例 2-1:为时间轴添加简单的 ActionScript】1、新建 Flash 文档,在时间轴上随意制作一个 Flash 动画。2、新建一个层
18、,层标签改为“action” 。3、在 action 层,时间轴动画运行的某一帧处新建关键帧(右键菜单插入关键帧,或者按快捷键 F6) 。4、打开动作面板,在“教本”窗格输入 ActionScript 代码:stop();5、保存,发布。【例 2-1 说明】我们可以看到,发布的动画时间轴运行到我们添加 stop();语句的地方就停在那里了,这就是这一句ActionScript 代码的作用。如果我们吧 stop();改成 gotoAndPlay(1);,Flash 就在第一帧和这一帧之间循环播放,余下的帧就运行不到了。这样添加在时间轴上的 ActionScript 代码可以实现对 flash 播
19、放时间轴的控制,但是距离真正的交互性还是有一定差距的,因为我们并不能参与到控制中来。要实现这样的交互性,需要使用按钮。增加按钮可以使用“插入”菜单“新建元件” ,在类型中选择按钮。按钮里的时间轴和我们在主场景 或者影片剪辑中习惯的时间轴不太一样,只有四 帧,分别是“弹起” 、 “指针经过” 、 “按下” 、 “点 击” 。望名知Flash ActionScript 编程制作物理课件实例教程第 12 页 共 78 页意,这几帧分别是按钮在不同的状态时显示的形态。按钮的 ActionScript 有两种写法,一种是直接写在按钮上,这是 flash 中比较传统的做法,从 Flash2就开始支持这种写
20、法了,不过这种写法如果需要给多个按钮添加动作,就需要分别给每个按钮添加动作,ActionScript 程序的管理不是很方便。另外一种是给按钮的实例起名之后,在时间轴上通过按钮的实例名定义匿名函数实现功能定义,这是 Flash MX 才开始正式支持的写法,我们在本讲义中一般使用这种写法。Flash 中的按钮事件有:事件 说明onDragOut = function() 当在按钮上单击鼠标按钮,然后将鼠标指针拖动到按钮之外时调用。onDragOver = function() 当用户在按钮外部按下鼠标按钮,然后将鼠标指针拖动到按钮之上时调用。onKeyDown = function() 当按钮具有
21、键盘焦点而且按下某按键时调用。onKeyUp = function() 当按钮具有输入焦点而且释放某按键时调用。onKillFocus = function(newFocus:Object) 当按钮失去键盘焦点时调用。onPress = function() 当按下按钮时调用。onRelease = function() 当释放按钮时调用。onReleaseOutside = function() 在这样的情况下调用:在鼠标指针位于按钮内部的情况下按下按钮,然后将鼠标指针移到该按钮外部并释放鼠标按钮。onRollOut = function() 当鼠标指针移至按钮区域之外时调用。onRollO
22、ver = function() 当鼠标指针移过按钮区域时调用。onSetFocus = function(oldFocus:Object) 当按钮接收键盘焦点时调用。【例 2-2:给按钮添加 ActionScript】1、在例 2-1 的基础上继续修改。2、 “插入”菜单“新建元件” ,名称填“play” ,类型选择按钮。3、在按钮的“弹起”帧的中心处写入黑色的“播放”两个字。在“指针经过”帧插入关键帧,将“播放”两个字的颜色修改为红色。在“按下”帧插入关键帧,将“播放” 两个字的颜色修改为绿色。在“点击”帧插入关键帧,绘制一个和“播放”两个字差不多大小的矩形。4、回到主场景,新建“btn”
23、 层。打开“库”面板,将按钮“play”拖入主场景。5、打开属性面板,在实例名称处填入“play_btn”Flash ActionScript 编程制作物理课件实例教程第 13 页 共 78 页6、在 Action 层的第一帧添加 ActionScript 代码:play_btn.onRelease = function() play();7、保存,发布。【例 2-2 说明】本例是一个最简单的按钮应用,在时间轴停止后,点击按钮,时间轴继续向前播放。【例 2-3:按钮热区小游戏】1、新建按钮元件:yes,在前三帧写入 “满意” , “点击”帧绘制一个和满意差不多大小的矩形。2、新建按钮元件:no
24、,在前三帧写入“不满意” , “点击”帧绘制一个比较大的的矩形,各个边都要要超过不满意三个字。3、回到主场景,将第一层层标签改为 main。使用文本工具写入“山东大学食堂满意度调查” 、 “你对山大大学的食堂满意吗?”等字样。4、在第三帧处建立空白关键帧,使用文本工具写入“谢谢你参与我们的调查,到目前为止,同学们对食堂的满意率为 100。从明天开始,所有食品每份价格提高 20,每份数量减少 20。 ”。4、新建 btn 层,将 yes、no 元件分别拖入,实例名分别设为:yes_btn、no_btn。在 btn 第二帧建立空白关键帧,将 yes、no 元件分别拖入,实例名分别设为: yes_b
25、tn、no_btn。第二帧和第一帧的两个按钮交换所Flash ActionScript 编程制作物理课件实例教程第 14 页 共 78 页在位置,使用信息或属性面板,保证前后两帧按钮位置没有移动。在 btn 层第三帧处插入空白关键帧。5、新建 action 层,在第一帧写入 ActionScript:stop();yes_btn.onRelease = function() gotoAndStop(3);no_btn.onRollOver = function() gotoAndStop(2);6、在 action 层第二帧写入 ActionScript:yes_btn.onRelease =
26、 function() gotoAndStop(3);no_btn.onRollOver = function() gotoAndStop(1);7、保存,发布。【例 2-3 说明】本例中巧妙利用了了 Flash 按钮的鼠标经过事件,制作了一个“永远点击不到”的按钮:不满意。达到了非常幽默的效果。【例 2-4:改变影片剪辑的位置 】1、新建 Flash 文档,我们统一设置文档大小为 550*400。在文档中“修改”菜单“新建元件” ,建立一个名为“ball”的影片剪辑。Flash ActionScript 编程制作物理课件实例教程第 15 页 共 78 页2、在影片剪辑“ball”的中心“十字
27、”处绘制一个直径 20 象素的小球。3、回到主场景,把层标签改为 main。打开库面板,将小球从库中拖入主场景。将小球的实例命名为:“ball_mc”。4、新建一个按钮元件,在按钮的中心处写“改变位置”几个字。将按钮拖入主场景,实例名称填入:“change_btn”。5、添加新的一层,层名称设为“action” 。6、在 action 层第一帧添加 ActionScript 代码:change_btn.onRelease = function() ball_mc._x = 100;ball_mc._y = 100;7、保存,发布。【例 2-4 说明】本例中我们通过影片剪辑的实例名称直接访问了实
28、例的位置属性(_x、_y) ,修改了小球的位置。我们常见的影片剪辑属性还有:_alphaFlash ActionScript 编程制作物理课件实例教程第 16 页 共 78 页设置或获取由 MovieClip 指定的影片剪辑的 Alpha 透明度 (value)。有效值为 0(完全透明)到 100(完全不透明) 。如果影片剪辑的 _alpha 设置为 0,虽然其中的对象不可见,但也是活动的。例如,依然可以点击一个 _alpha 属性设置为 0 的影片剪辑中的按钮。_currentframe(只读) ;返回由 MovieClip 指定的时间轴中播放头所处的帧的编号。_height以像素为单位设置
29、和获取影片剪辑的高度。_name返回由 MovieClip 指定的影片剪辑的实例名称。_rotation以度为单位指定影片剪辑的旋转。 _totalframes(只读) ;返回 MovieClip 参数中指定的影片剪辑实例中的总帧数。 _url (只读) ;获取从中下载影片剪辑的 SWF 文件的 URL。 _visible一个布尔值,指示由 MovieClip 参数指定的影片是否可见。不可见的影片剪辑(_visible 属性设置为 false)处于禁用状态。例如,不能点击 _visible 属性设置为 false 的影片剪辑中的按钮。 _width以像素为单位设置和获取影片剪辑的宽度。_xmo
30、use(只读) ;返回鼠标位置的 x 坐标。_xscale设置从影片剪辑注册点开始应用的该影片剪辑的水平缩放比例(百分比) 。默认注册点为 (0, 0)。缩放本地坐标系将影响 _x 和 _y 属性的设置,这两个设置是以像素为单位定义的。例如,如果父影片剪辑缩小到 50%,则设置 _x 属性时将移动该影片剪辑中的对象,移动距离为在影片设置为 100% 时其像素数的一半。_ymouse(只读) ;指示鼠标位置的 y 坐标。_yscale设置从影片剪辑注册点开始应用的影片剪辑垂直缩放比例。默认注册点为 (0,0)。【例 2-5:电表指针的转动】1、我们在例 1-2 的基础上继续修改。2、新建影片剪辑
31、元件 hand,在元件 hand 中心处绘制一个直径 10 象素的圆,分别 其上方和下方绘制长 140 和 10 的竖直线。如右图。3、回到主场景,将图层 1 层标签改为 main。将元件 dial 和元件 hand 分别拖入主 场景,实例名分别设为 dial_mc 和 hand_mc。使用任意变形工具将分别将表示中心的圆圈移动 到影片的注册点(十字处) 。借助属性面板,使两个元件注册点位置重合。Flash ActionScript 编程制作物理课件实例教程第 17 页 共 78 页4、新建按钮元件 rotate。在按钮中心处用文本工具写: “旋转表针” 。5、新建 btn 层,将按钮拖入主场
32、景,命名为 rotate_btn。6、新建 action 层,在 action 层第一帧添加 ActionScript 代码:rotate_btn.onRelease = function() hand_mc._rotation = 15;7、保存,发布。【例 2-5 说明】本例中我们通过点击按钮修改指针的旋转角度。需要注意_rotation 旋转属性是以影片的注册点(中心十字处)为中心旋转的,我们使用任意变形工具移动中心点只是为了方便属性面板精确移动指针和表盘的位置。Flash ActionScript 编程制作物理课件实例教程第 18 页 共 78 页第三课 第一个 ActionScrip
33、t 编程动画我们前一课介绍了 Flash ActionScript 的基础知识,我们这节课使用 ActionScript 制作第一个编程动画。编程动画,顾名思义,就是动画的运动是使用程序控制的。在制作编程动画之前,我们需要先补充一点ActionScript 编程的基本知识。变量是 Flash 中保存信息的容器,有了变量, ActionScript 程序才有了记忆。Flash 中的变量都需要事先声明,比如:var myVariable:Number; 这句语句表示声明一个变量:myVariable ,该变量保存一个数字值。在以上代码中,var 是定义变量的格式,使用 :Number 指定该变量保
34、存的值的类型,这称为数据类型指定。容器(用变量名表示)在 ActionScript 中始终不变,但内容(值)可以更改。变量的赋值使用赋值运算符,最常见的赋值运算符就是“=” 。比如:v=5; 表示将变量 v 赋值为 5。声明变量的时候可以同时赋值,比如:var myVariable:Number = 10; 我们在上一课就已经使用过赋值运算符给元件的属性赋值了。ActionScript 中常见的数值计算有加(+) 、减(-) 、乘(*) 、除(/)。运算顺序为先算乘除,后算加减,自左向右计算。必要的时候可以使用括号“( )”来改变运算顺序。比如 a 加 b 的和再除以 5,写为:(a+b)/5
35、 。【例 3-1:匀速直线运动】1、新建 Flash 文档,我们统一设置文档大小为 550*400。在文档中“修改”菜单“新建元件” ,建立一个名为“ball”的影片剪辑。2、在影片剪辑“ball”的中心“十字”处绘制一个直径 20 象素的小球。3、回到主场景,把图层 1 层标签改为 main。打开库面板,将小球从库中拖入主场景。将小球的实例命名为:“ball_mc” 。4、添加新的一层,层名称设为“action” 。5、打开动作面板,在 action 层的第一帧写入 ActionScript:var vx:Number = 5;var t:Number = 0;6、在 action 层的第二
36、帧插入关键帧(在第二帧处点击右键插入关键帧) ,写入 ActionScript:ball_mc._x = vx*t;Flash ActionScript 编程制作物理课件实例教程第 19 页 共 78 页7、在 action 层的第三帧插入关键帧,写入 actionScript:t+;gotoAndPlay(2);8、将小球所在的层(main 层)添加帧,以和 action 层帧数相等。9、保存、发布动画。【例 3-1 说明】本例为水平方向的匀速直线运动,位移公式为: 。我们可以修改第一帧的 vx 来查看不同速tvsx度下运动形态的不同。借助这个程序的例子,我们追踪一下各语句执行的过程,来加深
37、对程序运行的理解。首先来看看Flash 时间轴运行的情况,flash 开始运行第一帧、然后依次是第二帧、第三帧,如果没有添加控制语句,flash 将跳到最开始的第一帧,继续下一个周期。但是现在我们在第三帧添加了 gotoAndPlay(2);之后,flash 从第三帧跳到第二帧,接着向后运行第三帧,又跳回第二帧如此周而复始,就形成了第一帧只Flash ActionScript 编程制作物理课件实例教程第 20 页 共 78 页运行一次,循环执行二、三两帧的情形。我们可以在第一帧添加一些初始化的定义语句,第二帧进行具体的运算和操作,第三帧实现循环变量的修改和循环的执行。这样的动画形式习惯上称为三
38、帧循环动画。在这个例子中,第三帧的 t+;是 t 增加 1 的意思,从 0 开始每个循环执行一次,因此 t 记录了循环执行的次数。虽然 t 并不是 flash 动画运行的实际时间,但是由于 flash 每秒运行的帧数(fps)是固定的,帧循环次数也是正比于时间的。在程序运行中,使用帧循环次数来代替真正的时间会更方便,所以我们使用 t(习惯上变量 t 表示时间)来表示它。了解了时间轴运行的情况,我们再看看每一帧的具体操作。第一帧,执行 vx 和 t 两个变量的定义。第二帧,通过 t 乘以水平速度 vx 得到小球移动的距离,并把小球移动到计算出的位置上。然后 Flash 时间轴运行到第三帧,t 增
39、加 1,时间轴又跳到第二帧。在第二帧根据新的 t 计算出新的距离,设置小球新的位置就这样周而复始的循环下去,随着帧循环数 t 的不断增长,小球也就在不断的移动着位置。看起来就是小球在做水平方向的匀速直线运动了。【例 3-2:水平方向匀加速运动 】这个例子和例 3-2 中的绘制步骤基本类似,因此前 4 步参见例 3-2。我们会在这个小球运动的动画上派生出非常多的例子,因此大家可以直接把例 3-2 删除帧里的 ActionScript 代码后保存为小球运动模板,方便使用。1、打开小球运动模板。2、在 action 层的第一帧写入 ActionScript:var a:Number = 0.2;/a
40、 是水平方向加速度var t:Number = 0;/t 是运行时间3、在 action 层的第二帧写入 ActionScript:ball_mc._x = _;4、在 action 层的第三帧写入 ActionScript:t+;gotoAndPlay(2);/*每循环时间 t 增加 1,并跳转到第二帧因该处比较简单,以后不再注释说明*/5、另存,发布。【例 3-2 说明】本例中第 3 步中程序是不完整的,我们知道匀加速运动的位移公式: ,请各位同学自己完21ats成这个程序。在第一帧中以/开头的两句和第三帧/* */之间的都是 flash 的注释。注释不会包含在发布的 swf 文件中,因此
41、不必担心注释会增加文件的大小。在 flash 中添加注释是一个非常好的习惯,既方便别人理解自己的Flash ActionScript 编程制作物理课件实例教程第 21 页 共 78 页思路,也方便自己在以后理解当时的写作思路。【例 3-3:斜抛运动】1、打开小球运动模板2、在 action 层的第一帧写入 ActionScript:var vx:Number = 5;/vx 是水平方向速度分量var vy:Number = 10;/vy 是竖直方向初始速度分量var a:Number = 0.2;/a 是竖直方向加速度var t:Number = 0;/t 是运行时间3、在 action 层的
42、第二帧写入 ActionScript:ball_mc._x = vx*t;ball_mc._y = 400-(vy*t-a*t*t/2);/影片高度为 400,为与习惯坐标方向相同,使用 400-y 方向位移4、在 action 层的第三帧写入 ActionScript:t+;gotoAndPlay(2);5、另存,发布。【例 3-3 说明】其他部分比较简单,需要注意的是第二帧中 ball_mc._y 属性的设置。在 flash 中坐标零点在影片左上角,y 坐标方向为自上至下。所以单纯使用 vy*t-a*t*t/2 公式计算出的效果是引力方向向上的斜下抛运动,因此使用影片的高度减去该值。【例
43、3-4:动画变量、信息的显示 】1、我们在例 3-3 基础上继续修改。2、选择主场景,添加新层:show。选择文本工具 ,打开属性面板,文本类型选动态文本。3、在 show 层内合适位置点击,建立动态文本框。在属性面板实例名称处填“show_txt” 。Flash ActionScript 编程制作物理课件实例教程第 22 页 共 78 页4、在 action 层第二帧后追加 ActionScript:show_txt.text = “小球 x 坐标:“+ball_mc._x;5、另存为例 3-4,发布。【例 3-4 说明】本例中我们使用动态文本显示 Flash 中的变量和信息。动态文本显示的
44、是字符串数据类型。“小球 x坐标:“+ball_mc._x,在这个表达式中,前面用“引起来的是字符串类型,后面的 ball_mc._x 是数值类型。使用连接符号“+ ”连接时,会自动把数值类型转变成字符串类型,然后追加到前面的字符串后面。字符串类型的变量定义格式为:var myString:String; 【例 3-5:使用按钮修改变量初值 】1、在例 3-4 基础上继续修改。2、新建按钮元件:vx_add,在元件中用文本工具写:水平速度增加。新建按钮元件:vx_sub,在元件中用文本工具写:水平速度减少。3、回到主场景,新建 btn 层。将按钮元件 vx_add 和 vx_sub 拖入场景,
45、实例名分别设为“vx_add_btn”和“vx_sub_btn”。4、在 action 层第一帧后追加 ActionScript:vx_add_btn.onRelease = function() vx += 0.2;t = 0;vx_sub_btn.onRelease = function() vx -= 0.2;t = 0;5、另存为例 3-5,发布。Flash ActionScript 编程制作物理课件实例教程第 23 页 共 78 页【例 3-5 说明】本例中使用按钮改变变量的初始值,并使动画 t 归零,重新运行。vx += 0.2 是赋值语句的一种简写,等价于 vx = vx+0.2
46、; 。把 t 归零的原因是因为突然改变 vx,使用 vx*t 计算出的水平方向位移会发生一个突变,显得很不真实。除了 vx,我们也可以继续添加按钮,改变 vy 的初值,加速度 a 的值等等这些留待同学们课后自己完成。这个斜抛运动的动画算是我们第一个比较完整的使用 ActionScript 编程制作的 flash 动画,和我们使用补间动画方法制作的动画不同,利用 ActionScript 编程制作的动画每一帧小球的位置都是通过计算得到,科学性勿庸置疑,而且更重要的是,我们通过修改变量的初始值,可以查看在不同参数条件下的运行情况,更有利于抓住物理内涵,说清物理概念,体现物理思想。Flash Act
47、ionScript 编程制作物理课件实例教程第 24 页 共 78 页第四课 数值计算与编程动画实例Flash 中的数值计算除常规的 + - * / 之外,可以使用 Math 对象。Math 对象是无需使用构造函数即可访问的顶级对象。使用该对象的方法和属性可以访问和处理数学常数和函数。Math 对象的所有属性和方法都是静态的,并且必须使用语法 Math.方法( 参数) 或 Math.属性 来调用。在动作脚本中,使用双精度 IEEE-754 浮点数的最高精度定义常数。Math 对象的三角函数包括:Math.cos 计算余弦值。Math.sin 计算正弦值。Math.tan 计算正切值。Math
48、对象的反三角函数包括Math.acos 计算反余弦值。Math.asin 计算反正弦值。Math.atan 计算反正切值。Math.atan2 计算从 x 坐标轴到点的角度。Math 对象的指数、对数函数包括Math.exp 计算指数值。Math.log 计算自然对数。Math.pow 计算 x 的 y 次方。Math.sqrt 计算平方根。Math 对象取整函数包括Math.ceil 将数字向上舍入为最接近的整数。Math.floor 将数字向下舍入为最接近的整数。Math.round 四舍五入为最接近的整数。Math 对象还包括Math.max 返回两个整数中较大的一个。Math.min 返回两个整数中较小的一个。Math.abs 计算绝对值。Math.random 返回一个 0.0 与 1.0 之间的伪随机数。Math 对象还包括