1.3初识ActionScript
脚本是由英语单词、数学符号和函数构成的,下面是一个ActionScript的例子:
on(press){
gotoAndPlay("myframe");
}
你可以通过其中的关键单词推测这段程序的作用。单词press表示按,即用鼠标在某种对象
上面单击,这里的对象就是按钮。第二行中的长单词可以分开读成“gotoandplay”,可以将
其理解为命令Flash到达影片中的一个特定位置并从这一特定位置开始播放影片。
从以上可以看出,ActionScript可以控制Flash影片的播放。在着手学习ActionScript之前,
我们将对ActionScript在Flash影片中的功能作更多的了解。
Flash影片可以包含若干场景,每个场景都有时间轴,每条时间轴从第1帧开始。如果不添
加ActionScript,Flash影片会自动从场景1的第1帧开始播放,直到场景1的最后一帧,然
后接着播放场景2,以此类推。
ActionScript的主要目的就是用来改变这种自动而死板的线性播放行为,一段脚本可以使影
片在一个特定的帧上停止,循环播放前面的部分,甚至于让用户控制要播放哪一帧。
ActionScript能够使影片完全脱离被动的线性播放模式。
这还不是ActionScript的所有功能,它还可以将Flash影片从简单的动画改变为具有交互能
力的电脑程序。下面让我们见识一下ActionScript能实现的一些基本功能。
=控制播放顺序
你可以通过选择某个菜单将影片暂停在某个位置,然后由用户来决定下一步干什么,这就避
免让影片径直朝前播放。
=创建复杂动画
直接使用Flash中的绘图工具和基本命令来创建足够复杂的动画是相当困难的,但是脚本可
以帮助你创建复杂的动画。例如可以用ActionScript控制一个球在屏幕中无休止的跳动,并
且可以使它的动作遵从物理学中的重力定律。如果你不用ActionScript来实现这样的动画,
你将需要几千帧来模仿相似的动作,而用ActionScript,你将只需要一帧。
=响应用户输入
你可以通过影片向用户提出问题并接收答案,然后将答案信息用于影片中或将其传送到服务
器。加入了相应ActionScript的Flash影片更适合做网页中的表单。
=从服务器获取数据
与向服务器传送数据相反,使用ActionScript也可以从服务器中获取数据,你可以获取即时
的信息并将它提供给用户。
=计算
ActionScript也可以对数值进行计算,用它可以模拟出各种复杂的计算器。
=调整图像
ActionScript可以在影片播放时改变图像的大小、角度、旋转方向以及影片剪辑元件的颜色
等。你还可以从屏幕中复制或删除对象。
=测试环境
你可以用ActionScript测试Flash影片的播放环境,如获取系统时间,获取FlashPlayer的版
本信息等。
=控制声音
ActionScript可以方便地控制声音的播放,甚至控制声音的声道平衡和音量等。
1.4ActionScript放在哪里
初学ActionScript的Flash爱好者最想问的问题恐怕是“ActionScript应该放在哪
里?”
Flash是一种复杂的多媒体编辑环境,如果你曾经使用过Flash,或者看过Flash
MX附带的教程,你就应该知道Flash中的一些基本术语或元素。在Flash的元
素中有3个地方可以放置脚本。
1.4.1时间轴
Flash影片中的每个场景都有时间轴,时间轴上的每个关键帧都可以放置脚本。
并且,你还可以在每一个关键帧的不同层上放置不同的脚本。
在主时间轴中放置脚本之前,需要先选择一个关键帧。启动Flash时,时间轴中
有一个空白关键帧
当选中一个关键帧后,你就可以打开动作面板,查看里面的脚本或者开始编写你
自己的脚本了。
有几种方法可以打开动作面板。你可以选择“窗口”→“动作”命令,或者按快捷键
F9。
如果你对Flash复杂的影片浏览器比较熟悉,你也可以在影片浏览器中查看整个
Flash影片所用到的脚本。打开影片浏览器的快捷键是Alt+F3。
如图1-2所示即为FlashMX的动作面板。该动作面板被命令为“动作-帧”,这是
因为其中的脚本将作用在帧上。如果是新建的一个影片,动作面板将是空的。后
面我们将在动作面板中添加各种各样的脚本。第2章我们将看到如何使用动作面
板。
时间轴中的脚本将在Flash影片播放到脚本所在的关键帧位置时自动执行。例
如,如果你为某一关键帧添加了stop()命令,当影片播放到那一帧位置时就会自
动停止。要让影片继续播放,只有在其他的脚本中添加相应的命令。
在时间轴中添加脚本还有一个好处就是方便你在ActionScript中使用函数。函数
是可以重复使用的脚本代码,要想使整个影片都可以调用脚本中的函数,就必须
将函数放置在主时间轴中。
1.4.2按钮
Flash中的元素又称作元件(symbol)。元件主要有3种:图形(graphic)、影
片剪辑(movieclip)和按钮(button)。图形元件不能承载脚本,它们只能是简
单的静态或动态图像。影片剪辑与图形元件类似,但是它可以承载脚本。
第3种元件就是按钮,按钮可以承载脚本。事实上,如果没有脚本,按钮几乎不
会发挥什么作用。
要为按钮添加脚本,首先要在舞台中选中按钮,然后选择“窗口”→“动作”命令或按
快捷键F9打开动作面板。
与帧动作面板相对应,选中按钮时动作面板的标题是“动作-按钮”。
你可能会认为,为按钮添加的脚本应该是在单击按钮时执行。其实,也可以为其
他鼠标动作添加相应的脚本,如鼠标进入和移出按钮区域。按钮也可以响应按键
动作,这使得我们可以方便地为按钮设置快捷键。
1.4.3影片剪辑
影片剪辑不同于图形元件,可以为影片剪辑命名,为影片剪辑添加脚本。为影片
剪辑添加脚本的方法与按钮类似。
为影片剪辑添加的脚本可以用来控制影片剪辑自身或控制时间轴中的其他影片
剪辑。使用脚本可以判断影片剪辑出现在屏幕中的什么位置,你也可以用脚本来
控制影片剪辑的重复播放等,进而控制整个动画。
除了可以为影片剪辑添加脚本,你也可以在影片剪辑内部添加脚本。影片剪辑其
实也是一个单独的Flash影片,在影片剪辑中有一条单独的时间轴,你可以像在
主时间轴中添加脚本一样在影片剪辑内部的时间轴中添加帧动作脚本。同样地,
你也可以将按钮放置到影片剪辑内部并为按钮添加脚本。也就是说主时间轴中的
影片剪辑里面有子影片剪辑,子影片剪辑里面又有按钮,按钮中也可以有影片剪
辑,如果需要,你都可以为它们添加脚本。
1.5练习:你的第一段ActionScript
下面来编写你的第一段ActionScript,让你对ActionScript有更深的了解。操作
步骤如下:
(1)创建一个新的Flash文档。
(2)选中时间轴中的第1帧,按F7键两次插入两个空白关键帧,这时时间轴
中应有3个空白关键帧。
(3)在每一帧中绘制不同的图形。
(4)选择“控制”→“测试影片”命令或按Ctrl+Enter键测试影片,你会看到影片在
这3个帧之间循环播放。
(5)回到主时间轴,选中第2个关键帧,按F9键打开动作面板。
(6)动作面板左边显示了可扩展的ActionScript关键字目录。在“动作”/“影片控
制”目录下面找到关键字stop并双击,脚本窗口将添加如下所示的一行语句:
stop();
(7)关闭动作面板,按Ctrl+Enter键测试影片,播放第1、2帧后影片会停止,
你将看不到第3帧。
ActionScript发挥了作用,它成功地阻止了影片无休止地循环播放这3帧。
第2章FlashMX的动作面板
动作面板是FlashMX面板系统的一部分,ActionScript程序员经常会用到它。
为了成长为一名娴熟的Flash编程高手,你有必要对Flash的动作面板和在线帮
助系统相当的熟悉。
动作面板的标准模式允许你从脚本目录中选择关键字并设置相应的选项,而专家
模式为程序员提供了直接输入代码的自由。
2.1了解动作面板
FlashMX的面板系统向你提供了查看和设置Flash中各种元素信息和属性的捷
径。第一次启动FlashMX的时候,系统将会询问你要使用Flash做哪些方面的
工作,然后为你设置默认的面板界面。你可以选择“窗口”→“面板设置”命令
在不同的面板界面之间切换。与此同时,也决定了动作面板的大小,但是你可以
将它改变成任何适合你需要的大小。
你可以通过键盘上的F9键随意显示或隐藏动作面板。显示动作面板后,你可以
单击它的标题栏将它展开或折叠起来。你还可以拖动动作面板的左上角将它从
Flash的工作界面中分离出来。
动作面板有两种不同的工作模式。默认的模式是标准模式。在标准模式下,你必
须从窗口左边的菜单中选择需要的关键字,而不能直接使用键盘输入脚本,因此
可以有效避免即使是很细小的错误。
2.2动作面板的标准模式
面板上部的下拉菜单显示了你当前所编辑的脚本的准确位置。图2-1中显示的是
“帧动作脚本1图层名称图层1”,也就是说当前所编辑的脚本是作用于图层
1的第1帧的。
面板左边显示了ActionScript命令的分类目录,单击展开一个目录,你将看到它
里面的子目录或命令。
面板的右边是一个空白文本区,它将显示你所选择的命令和函数。图2-2显示了
你从左边的目录里面选择插入“动作”→“影片控制”中的goto命令后的动作
面板。goto命令是通过双击鼠标添加到脚本中的。
面板右上部显示了goto命令的简单定义,下面显示了与goto命令相关的各种选
项,包括“场景”、“类型”和“帧”等,就像是所选命令的参数设置区。参数
设置区的状态会依据所选择ActionScript命令的不同而发生变化。
第一个需要设置的选项是选择gotoAndPlay命令还是选择gotoAndStop命令。
图2-2中选中的是“转到并播放”单选项,也就是gotoAndPlay。这两种命令是
相似的,都是跳转到特定的帧,但是gotoAndPlay命令使影片从特定帧开始播
放,gotoAndStop命令使影片在特定帧上停止。
这个命令还需要附加一些信息才能正常工作。如,你想要使影片跳转到哪一帧,
这一帧位于哪个场景,图2-2指定的是当前场景。在“类型”下拉菜单中可以选
择指定特定帧的方式,你可以使用帧号、帧标签和表达式中的一种。图2-2选中
的是帧号类型,这就要求你精确地指定帧的编号,如1。
在以上内容的下面显示了和两个按钮。它们使你可以快速地在脚本中插入和删
除命令。但是这种方法很少使用,你可以通过左边的分类目录添加脚本,使用键
盘上的Delete或BackSpace键删除不需要的命令。
和按钮的右边还有几个功能不一的按钮。按钮使你可以从脚本中查找文本,按
钮使你可以替换文本,使用按钮可以插入目标路径,按钮可以为你调试脚本设
置断点,和按钮使你可以选择脚本的前一行或后一行。
在动作面板的底部你可以看到这样的一行:“第1行:gotoAndPlay(1);”,这
是动作面板的状态行,它显示了当前选中的行号和该行的内容。
2.3分类目录
动作面板左边的目录将ActionScript的关键字有组织地分成几组,以使你更容易
查找到需要的关键字的位置。以后我们会对每个组中的命令和符号作详细的讲
解,下面先对其进行一下简要的介绍。
=动作
在动作类中包含了最简单的ActionScript命令。动作类提供了测试条件、循环、
创建函数、复制和创建影片剪辑以及从服务器中获取数据等功能的命令。动作类
中的命令是ActionScript最重要的组成部分。动作类又分为影片控制、浏览器/
网络、影片剪辑控制、变量、条件/循环、打印、用户定义的函数以及其他动作
等子类。
=运算符
它包括了各种数学和比较运算符,如+号,用于两数相加;==号,用于判断两数
是否相等。运算符类下面又分为按位、比较、赋值、逻辑、算术和其他运算符等
子类。
=函数
使用函数可以转换数据或获取需要的信息,如获取Flash的版本信息。你可以使
用函数将字符串123转换成数字123。你还可以自定义需要重复使用的函数。在
函数类下面主要有两个子类:数学函数和转换函数。
=常量
常量类中包含了一些具有特定值的特殊关键字,如true、fal、null和newline
等。
=属性
属性类中的关键字反映了Flash中元素的相关信息。例如_x属性代表影片剪辑
在屏幕中的水平位置。
=对象
对象类是最复杂的一类,它包含了ActionScript中的众多概念。所有的对象关键
字被分成4个子类:核心、影片、客户端/服务器、创作。影片剪辑是影片类下
面的一种,它包含了与控制影片剪辑相关的关键字。Math是核心下面的一种,
它包含了求平方根、正弦值等数学函数。
=否决的
这一类中的关键字是已经作废但FlashMX仍然支持的,在FlashMX中请尽量
避免使用,因为在以后的Flash版本中将不再支持这些关键字。
=FlashUI组件
这一类中的关键字包含了特殊功能的组件,如单选按钮、滚动条等。
=索引
索引类将ActionScript中的所有关键字按字母顺序排列。以上各类中的关键字都
可以在索引类中找到。
动作面板中提供的关键字分类有时可以帮你方便地找到需要的关键字,但也有可
能给你带来麻烦。如你可能认为表示影片剪辑水平坐标属性的_x应该在对象类
的“影片”/“影片剪辑”/“属性”里面,但它却在属性类里面。你可能认为sqrt
(开平方)应该在函数类中,但它却在“对象”/“核心”/“Math”/“方法”下
面。
2.4使用Flash的帮助系统
最好的程序员往往也要查阅一下工具书,Flash中的帮助系统就是一本功能强大
的工具书,所以在学习更多内容之前,先了解一下Flash的帮助系统,将对我们
的学习不无陴益。
Flash使用工具提示和基于扩展HTML的帮助系统。为了对ActionScript的使用
更加娴熟,你就需要知道如何使用它们。
2.4.1简单定义
如果你习惯使用动作面板中的关键字分类目录,你应该会注意到当你在左边的目
录中选中某个关键字时,面板右边的上面部分会给出与所选关键字相应的简单定
义。你会看见这样的句子:“要添加某项,可双击该项或将其拖动到脚本窗口。
例如选中goto命令时,你会看到这样的提示:“转到影片的指定帧。”它显示
了该脚本的基本功能。
单击别的命令查看一下它们的定义,在学习下面的知识之前,你可以花些时间多
看一下动作面板中的命令。
2.4.2脚本参考面板
Flash使用脚本参考面板帮助你记住ActionScript的语法。可以选择“窗口”→
“脚本参考”命令或按快捷键Shift+F1打开脚本参考面板。
脚本参考面板的左边与动作面板左边的脚本目录很相似。你也可以通过动作面板
进入脚本参考面板,单击动作面板中的按钮可以打开脚本参考面板,打开的脚
本参考面板会自动显示你在动作面板中选中的命令。
2.4.3HTML帮助文档
如果要获得ActionScript命令更详细的说明,可以选择“帮助”→“动作脚本词
典”命令,这将启动你的浏览器并打开如图2-4所示的页面。
图2-4动作脚本词典
浏览器窗口的左边是所有ActionScript命令和函数的总目录,在左边的条目上单
击,窗口的右边部分会显示其详细的内容。
选中每个条目时,右边窗口中通常会包括与该条目的说明以及它的使用范例。
在你以后使用Flash的时候可能经常会用到帮助文档,所以请花一些时间了解它
吧。
2.5动作面板的专家模式
现在你已经了解了动作面板的标准模式,下面要向你推荐多数ActionScript程序
员使用的专家模式。
在专家模式下,你可以直接通过键盘输入脚本,而不需要从左边的目录中选择命
令。这种模式下你可以在动作面板中输入任何东西,但也很容易导致错误。
在专家模式下,你仍然可以从左边的目录中选择并插入标准的ActionScript命令、
函数和运算符。当你记不确切一条命令的时候就可以使用这种方法。
2.5.1切换模式
要从标准模式切换到专家模式,可以单击动作面板中的按钮,或者单击动作面
板右上角的按钮,在打开的下拉菜单中选择“专家模式”命令。在动作面板获
得焦点的情况下,快捷键Ctrl+Shift+N可以切换到标准模式,快捷键Ctrl+Shift+E
可以切换到专家模式。
如图2-5所示为专家模式下的动作面板。在专家模式下,参数设置区、命令提示
信息都没有了,脚本编辑窗口占据了动作面板右边的大部分。
从标准模式切换到专家模式是非常容易的,但是要从专家模式切换到标准模式则
要求脚本中没有语法错误。比如说你不明白如何设置一些命令的参数,需要从专
家模式切换到标准模式以使用标准模式下的提示,但是Flash却不允许你进行切
换,提示你“此脚本中有语法错误,必须在‘专家模式'下编辑它”;而当你知
道如何设置参数并将脚本书写正确了,又不再需要切换到标准模式了。
2.5.2动作面板的下拉菜单
动作面板的下拉菜单中有一些特别是在专家模式下编辑脚本时很有用的命令。
你可以使用查找和替换命令在代码中执行查找和替换操作。按快捷键Ctrl+F可
以打开“查看”对话框,按快捷键Ctrl+H可以打开“替换”对话框。
“转到行„”命令可以快速转到并选中指定的行。
“语法检查”命令或按钮可以对窗口中的脚本进行语法检查,如果没有语法错
误,将提示你“此脚本中没有错误。”
通常,语法检查只能检查出代码中的明显语法错误,它并不能检查脚本是否能正
确运行。经常会发生这样的事情,就是每一行的代码都是正确的,但所有的代码
加在一起却导致了错误。
语法检查功能很实用,特别是对初学者来说,它能方便地检查出误用运算符或缺
失括号等情况。
“自动套用格式”命令可以按预先设置的样式和缩进等设置脚本的格式。你可以
选择“自动套用格式选项”命令,在“自动格式选项”对话框中重新设置要应用
的格式,
另外,选择“首选项„”命令可以设置动作面板中脚本代码的颜色、制表符宽度、
字体等。你也可以在FlashMX的菜单栏中选择“编辑”→“首选参数”命令,
在打开的“首选参数”对话框中选中“动作脚本编辑器”选项卡,打开相同的对
话框,如图2-7所示。
图2-7“首选参数”对话框
为脚本上色有利于编写程序。使用这项功能时,你将看到ActionScript中的关键
字以一种颜色显示,而另外一些变量和常数以另外的颜色显示。这对初学者是很
有帮助的。如正确输入关键字gotoAndPlay后,它马上会以蓝色显示。如果它
的颜色没有发生变化,有可能就是你的输入有误。
动作面板下拉菜单中还有导入导出文件以及打印等命令,可以将使用外部的文本
编辑器编辑好的脚本导入到动作面板中,或将动作面板中的脚本导出或打印出
来。
从外部导入脚本的方法并不值得推荐,因为动作面板虽然不是最快捷的文本编辑
器,但是在其中编辑ActionScript是最好的,你可以在需要的时候参照脚本分类
目录,可以即时的查看Flash中的影片剪辑的名称,查看帧编号或帧标签。另外,
你还可以快捷地切换到Flash影片中要插入脚本的任何位置。
2.5.3在专家模式下输入脚本
使用动作面板的专家模式要比标准模式容易得多,因为在专家模式下你只需要敲
击键盘,而不需要在窗口中填写表格。专家模式下的动作面板就像一个简单的文
本编辑器。
使用专家模式的缺点就是很容易出错。标准模式为你添加了很多限制,而在专家
模式下你有可能键入不正确的命令或者将参数放错位置。
在专家模式下,你可以方便地将光标定位在合适的位置。但是Flash也不能完全
任你随心所欲,它会在你键入的同时自动调整脚本格式,将不同的关键字设置成
不同的颜色。
你可以单击按钮以检查脚本中的语法错误,单击按钮以格式化整个脚本,如在
需要的位置换行、设置空格和缩进等。
动作面板还有代码提示的功能。当你键入脚本的时候有时会出现一个提示菜单,
你可以忽略它继续键入,或者从中选择需要的项目。单击按钮可以显示代码提
示。
2.6练习:在专家模式下输入脚本
下面我们练习在专家模式下输入脚本。其操作步骤如下:
(1)新建一个文档。
(2)选择默认的场景1图层1中的第一个空白关键帧。
(3)按F9键打开动作面板。
(4)使用菜单将动作面板切换到专家模式。
(5)在脚本编辑区单击。
(6)键入下面的一行代码:
gotoAndPlay(5);
第3章ActionScript编程初步
计算机程序是由命令、函数、运算符、条件和循环等结构组成的。命令是为计算
机下达的一系列指令,函数执行计算和返回值,通过运算符将若干数据以某种特
定的方式结合起来,条件测试一个或多个值以返回一个为true或fal的布尔值,
循环结构使得程序能够重复执行一系列相同的指令。
变量是存储数据的容器,变量有变量名和变量值。
编程是一项需要耐心的工作,首先你必须理解要用程序解决什么样的问题,然后
需要将这个问题分解成若干步骤,将每个步骤再分成更小的步骤,直到每个步骤
都小得很容易解决了为止。
程序编写好后,可能会存在许多漏洞或缺陷,所以你还需要对程序进行调试,直
到程序能正确运行为止。
3.1程序基本结构
计算机程序是由命令、函数、运算符、条件和循环等结构组成的。
3.1.1命令、函数和运算符
在此之前,我们都是用关键字来描述ActionScript中的元素,如关键字
gotoAndPlay,它也是一个命令。
命令是ActionScript中用来告诉Flash所要执行的特定操作的元素。之所以称之
为命令,就是因为它将被严格的遵照执行,如果要用gotoAndPlay跳转到一个
不存在的帧,这样的命令就不能被执行。
命令是程序中最基本的元素,在Flash中如果不使用命令,几乎不能进行任何操
作。从本书中你将学到很多命令。
函数是ActionScript中用来执行计算和返回结果的元素。例如,一个特定的函数
可以计算并返回一个指定数的平方根。
命令和函数都可以使用参数。参数就是传递给命令或函数的一个值。如
gotoAndPlay命令就至少需要一个帧编号或帧标签作为参数。求平方根的函数也
需要一个数值作为参数。
与命令和函数不同的是运算符,它们主要是一些符号,而不是字母。例如,+运
算符执行两数相加的操作。
在ActionScript程序中你将会用到大量的命令、函数和运算符。
3.1.2变量
要编写复杂的计算机程序往往需要存储很多的信息。有时你可能只需要存储很短
暂的时间,例如,如果需要重复执行10次相同的命令,你就需要对命令的执行
次数进行记数,直到满10次为止。
所有的编程语言都使用变量来存储信息。一个变量由两部分构成:变量名和变量
的值。
1.变量名
变量名通常是一个单词或几个单词构成的字符串,也可以是一个字母。总的来说,
你需要尽可能地为变量指定一个有意义的名称。
例如,如果你要使用变量存储用户的姓名,用urName作为变量名将是一个
很好的选择。如果你使用n作变量名,似乎太短了一点;如果使用name,又可
能与影片中其他对象的名称相混淆。
在ActionScript中为变量指定变量名时已经形成了一种不成文的规范,就是变量
名通常以小写字母开头,当一个新的单词出现时,大写这个新单词的第一个字母,
如urName,长一点的例子如currentUrFirstName。
变量名中不允许出现空格,也不允许出现特殊符号,但是可以使用数字。
2.变量类型
你可以用变量存储不同类型的数据。数字是最简单的变量类型。
你可以在变量中存储两种不同类型的数字:整数和浮点数。整数没有小数点部分,
如117、-3685都是整数。浮点数有小数点部分,如0.1、532.23、-3.7都是浮
点数。
你也可以在变量中存储字符串,字符串就是由字符组成的序列,可以是一个或多
个字符,甚至可以没有字符,即空字符串。
使用引号定义字符串,使其与其他变量相区别。如7是一个数字,而“7”则是
一个字符串,这个字符串由一个字符7组成。
在别的编程语言中,你可能需要在程序的开头部分提前定义程序中要用到的变量
的具体类型,但在ActionScript中不需要预先声明变量,你只需要直接使用它们,
Flash在第一次遇到它们的时候会自动为它们创建变量。
另外,变量所能存放的数据类型也没有严格的限定,某一变量可以在一个位置存
放字符串,而在另一个位置存放数字。
这种灵活性并不是经常用得到,但是它可以让程序员们少一些不必要的担心。
ActionScript程序员不必担心的另一个问题是废弃变量的空间回收问题。即当你
不再需要使用一个变量的时候,你可能需要收回该变量占用的存储空间。大多数
现代的计算机语言如ActionScript都可以自动回收空间,所以你也不必担心了。
除数字和字符串类型外还有一些别的变量数据类型。例如,数组可以存放一系列
的数据而非单个数据。
3.1.3条件
程序本身并不能作出抽象的决定,但是它可以获取数据,并对数据进行分析比较,
然后根据分析结果执行不同的任务。
例如,你想要检查用户输入的名字并确定其至少包含3个字母。程序需要做的事
情就是对用户名作出判断,如果是3个或更多的字母,就执行一种操作;如果不
足3个字母则执行另一种操作。
这里,作出一个决定需要两步,第一步是检查条件是否满足,如果名称符合3
个字母长度,条件满足,我们称条件的值为真(true);否则条件不满足,我们
称条件的值为假(fal)。所有的条件都必须是两个值中的一种,要么为真,
要么为假。要么为真(true)要么为假(fal)的数据类型称为布尔(boolean)
类型。
决定的第二步是根据条件为true或为fal的情况选择要执行哪些代码。有时只
有一个选项,当条件为true时执行该选项;如果条件为fal,将不执行任何代
码。有时会有两个相对的选项,条件为true和fal时分别执行不同的代码。
例如,你想让计算机根据一个变量的值是1、2或3执行3种不同的任务,可以
像这样表达:
如果变量的值等于1,执行命令1
如果变量的值等于2,执行命令2
如果变量的值等于3,执行命令3
条件总是建立在比较之上的,你可以比较两个变量的值以判断它们是否相等;或
者判断一个是否大于另一个,或是小于另一个。如果变量是字符串类型,你可以
比较它们按字典顺序排列时的先后次序。
3.1.4循环
与人不同,计算机很适合做重复性的工作。一件事情仅仅重复几次就可能使人厌
倦,但是让计算机重复执行成千上万次它都照样有耐心。
循环在每种编程语言中都是一个很重要的部分,ActionScript也不例外。你可以
指定一条指令执行给定的次数,或者令其执行到满足指定的条件为止。
事实上,条件是循环中的重要组成部分,整个循环只需要一个开始点,一个结束
点,再加上一个标志循环结束的条件。
例如,你需要循环10次,使用一个变量从0开始计数。每循环一次,计数加1。
当计数变量达到10时,循环结束,程序继续执行循环以后的部分。下面的内容
代表了一个标准的循环结构:
(1)循环以前的命令。
(2)循环开始,计数变量置0。
(3)循环中的命令。
(4)计数变量加1。
(5)如果计数变量小于10,执行步骤(3)。
(6)循环以后的命令。
在上面的步骤中,步骤(1)只执行1次,步骤(2)表示循环的开始,步骤(3)、
(4)、(5)都将执行10次,当循环结束后,执行步骤(6)及以后的部分。
3.2ActionScript之一角
当你在编写自己的脚本时,你会用到各种各样不同的关键字和符号,为便于你熟
悉脚本的构成,下面先来看一个真实的例子。
这是一段作用于按钮的脚本,当用户单击按钮时(确切地说是松开按下的按钮时)
执行它。其中没有包含特殊的函数,但是它体现了ActionScript的主要结构。
on(relea){
varmyNumber=7;
varmyString="FlashMXActionScript";
for(vari=0;i
trace(i);
if(i+3==8){
trace(myString);
}
}
}
脚本的第1行表明当用户松开按下的按钮时执行大括号中的语句。on(relea)
结构只能用于按钮,其他相关的几种用法如on(press)、on(rollOver)、on(rollout)、
on(dragOver)、on(dragOut)等。
第1行末尾的大括号{表示一段相对独立的代码段的开始。从{到与之相对的}之间
的代码是一个整体,它们都从属于按钮的relea事件。
请注意,大括号之后的代码较之第1行有一个制表符(按一次Tab键)的缩进,
其后的每行代码与之具有相同的缩进程度,直到一个新的大括号开始,在新大括
号后的语句会比前面的语句增加一个制表符的缩进,以此类推,这种特点与其他
编程语言是类似的。Flash会自动将你添加的代码设置成正确的缩进样式。
代码的第1行创建一个名为myNumber的局部变量,并将该变量的值设置为7。
下面一行将字符串FlashMXActionScript赋给另一个变量myString。稍后我们
会更详细的介绍变量的两种类型:局部变量和全局变量。
分号;表示一条指令的结束,在每个完整指令的末尾都应该添加分号。
for代表一个循环结构的开始,此处的循环执行7(myNumber)次,即令i从0
递增到6,每递增1便执行一次循环结构中的语句。for后面大括号中的部分即
为循环体。
命令trace将它后面括号中的内容发送到输出窗口。我们将在下一部分详细介绍
输出窗口。
if是一种条件结构,它测试后面的内容i+3==8是否为true,如果为true,则
执行后面的语句;否则跳过该代码段。
if结构中只有一个trace命令,它将变量myString的值发送到输出窗口。
上例脚本以三个反向大括号}结束,第1个表示if语句的结束,第2个表示for
语句的结束,第3个表示整个on(press)段结束。
3.3输出窗口
输出窗口是只在测试Flash影片时出现的一个编程工具,Flash用它来显示出错
信息或其他的一些重要信息。用户可以用ActionScript中的trace命令自定义要
发送到输出窗口中的信息。
输出窗口在测试程序时非常有用。你可以使用trace命令在输出窗口中显示变量
的值或者哪一部分ActionScript正在执行。
输出窗口还可以帮助你学习ActionScript。你可以编写一些小程序,将信息发送
到输出窗口,这将帮助你看到程序的运行结果。
要想熟悉输出窗口,最好的方法就是多使用它。下面就来编写一段小程序,将信
息发送到输出窗口。
(1)启动FlashMX。
(2)选中时间轴的第1帧,打开第1帧的动作面板。
(3)使用右上角的菜单将动作面板切换到专家模式。
(4)在脚本编辑区单击鼠标,将鼠标光标定位到脚本编辑区中。
(5)在动作面板中输入如下ActionScript:
trace("IlikeActionScript!");
(6)按Ctrl+Enter键测试影片,因为舞台中没有任何图像,所以你将看到一个
空白窗口,同时出现一个输出窗口,窗口中显示:IlikeActionScript!如图3-2
所示。输出窗口显示了trace命令中的信息
和动作面板一样,输出窗口右上角也有一个下拉菜单,其中包含了拷贝、清除、
查找、保存到文件以及打印等命令。
下拉菜单的最后一项命令是“调试级别”,你可以选择“错误”、“警告”、“详
细”中的一种,如果选择“无”,将不显示任何信息。
3.4ActionScript基本语法
前面介绍了程序的基本结构,下面要讲解ActionScript中的基本语法。
3.4.1变量
1.设置变量
在ActionScript中使用变量的方法很简单,你只需要为变量名分配一个值,例如:
myVariable=7;
该例在创建名为myVariable的变量的同时将其值设置为7,你可以为变量任意
取一个名字,而并不需要使用本例中的myVariable。
可以使用输出窗口查看变量的值,如在一个空白影片第一帧的动作面板中添加如
下ActionScript:
x=7;
trace(x);
首先,数字7被存储在变量x中;然后,使用trace命令将变量x的值发送到输
出窗口。影片播放时,输出窗口中会显示数字7。
2.全局变量
根据变量作用的范围不同可将变量分为全局变量和局部变量。
全局变量就是可以作用在整个Flash影片的所有深度级别上的变量。你可以在某
一帧中设置它,并在其他帧中使用和改变它的值。
你不需要使用特别的方法创建全局变量,像前一个例子一样,直接设置并使用它,
它自动成为一个全局变量。
在许多编程语言中,全局变量可以在任何地方使用。Flash影片使用一个概念叫
层级(level)。整修影片的主时间轴作为根(root)层级,影片剪辑是时间轴中
的小影片。影片剪辑中的图形和脚本要比根层级低一个级别。影片剪辑不能直接
使用根层级中的全局变量。
3.局部变量
局部变量只能存在于当前脚本中,而在其他帧中它将不再存在。你可以在使用同
一个变量名在不同的帧中创建不同的局部变量,它们之间将互不影响。
局部变量可用来创建模块化的代码。当前脚本执行完时,局部变量将被从内存中
删除;而全局变量将保留到影片结束。
创建局部变量需要使用关键字var。例如,下面的ActionScript创建值为15的局
部变量myLocalVariable:
myLocalVariable=15;
使用var创建局部变量后,在当前代码中就不再需要使用关键字var了。例如,
下面的代码创建值为20的局部变量myLocalVariable,然后将其值改为8,再发
送到输出窗口中。
varmyLocalVariable=20;
myLocalVariable=8;
trace(myLocalVariable);
如果没有特殊的需要,请尽量使用局部变量。
3.4.2比较
在ActionScript中比较两个事物是很容易的,要进行比较可以使用标准的数学符
号,如=、<、>等。
1.相等
在ActionScript中用比较运算符对两个值进行比较。
要比较两个值是否相等,可以使用连在一起的两个等于符号(==)。单个等于
符号(=)是用来为变量分配值的,并不是比较运算符。
如果要比较变量x的值是否等于7,就可以使用==符号,如下所示:
varx=7;
trace(x==7);
以上代码使用=符号将变量x设置为7,然后使用==符号对x和7进行比较。
测试这两行代码,输出窗口将显示“true”。如果将x设置为8或其他数,则会
显示“fal”。
==符号还可以用来比较两个字符串。如下所示:
varmyString="HelloActionScript.";
trace(myString=="HelloActionScript.");
trace(myString=="helloActionScript.");
程序运行时,你将在输出窗口中看到一个“true”和一个“fal”,因为在字符
串中字母是要区分大小写的。
如果你要比较两个值是否不等,可以使用!=符号,它的意思是“不等于”。如下
所示:
vara=7;
trace(a!=9);
trace(a!=7);
第1个trace语句显示信息“true”,因为a确实不等于9;第2个trace语句
显示信息“fal”。
2.小于和大于
使用标准的数学符号<和>比较两数是否成小于或大于关系。举例如下:
vara=9;
trace(a<10);
trace(a>5);
trace(a<1);
你将从输出窗口中看到“true”、“true”和“fal”。
符号<=或>=用于比较一个数是否小于等于或大于等于另一个数,如下所示:
vara=9;
trace(a<=9);
trace(a>=9);
trace(a>=7);
以上3个trace语句都将显示“true”。
3.4.3运算
通过运算可以改变变量的值。分别使用算术运算符+、-、*、/执行加、减、乘、
除操作。
如下所示的ActionScript将值为9的变量x加上一个数7:
varx=9;
x=x+7;
trace(x);
运算结果为16。
在ActionScript中执行运算可以使用一些简写方法,如+=运算符将其前后的值相
加并将结果赋给它前面的变量。前面的脚本也可以写成如下的形式:
varx=9;
x+=7;
trace(x);
++运算符与+=运算符类似,但它每执行一次,变量的值只增加1,如下面的例
子:
varx=9;
x++;
trace(x);
结果显示10。再看下面的例子:
varx=9;
trace(x++);
trace(x);
结果是9和10。为什么呢?因为第1个trace语句输出x的当前值9,然后将x
加1,输出x的新值10。
再试一下下面的脚本:
varx=9;
trace(++x);
trace(x);
这次的结果为两个10。因为将++运算符置于变量前面,将先执行运算再返回变
量的值。
同理,--运算符执行递减操作,-=运算符在变量当前值的基础上减去一个数,*=
运算符在变量当前值的基础上乘上一个数,/=运算符在变量当前值的基础上除以
一个数。
3.4.4条件
既然现在你已经知道如何比较两个变量,你就可以将比较结果作为执行某些语句
的条件。
1.if语句
if语句使你可以使用比较结果控制Flash影片的播放。如下所示的语句判断X是
否等于9,如果比较结果为true,则让影片跳到第15帧:
if(x==9){
gotoAndPlay(15);
}
if语句以if开始,其后紧跟一个比较表达式,比较表达式通常用一对括号括起来,
再后面即是用大括号括起来当比较结果为true时要执行的代码。
2.el
对if语句可以进行扩展,使用el执行条件不成立(比较表达式为fal)时的
代码,如下所示:
if(x==9){
gotoAndPlay(15);
}el{
gotoAndPlay(16);
}
你也可以使用elif语句将if语句更推进一步,如下所示:
if(x==9){
gotoAndPlay(15);
}elif(x==10){
gotoAndPlay(16);
}elif(x==11){
gotoAndPlay(20);
}el{
gotoAndPlay(25);
}
你可以让if语句想要多长就有多长,你也可以使用elif语句对别的变量进行
比较,如下所示:
if(x==9){
gotoAndPlay(15);
}elif(y<20){
gotoAndPlay(16);
}el{
gotoAndPlay(25);
}
3.复合比较
你可以在一个if语句中对几个比较表达式的值进行判断,比如说你希望在x为9
并且y为20时跳转到第10帧,可以使用如下所示的脚本:
if((x==9)&&(y==20)){
gotoAndPlay(10);
}
逻辑与运算符&&将两个比较表达式联接在一起成为一个复合表达式,当两个表
达式的值都为true时复合表达式的值才为true。每个比较表达式都需要添加独
立的括号以便Flash能正确识别。在Flash的早期版本中使用and执行逻辑与运
算,现在已推荐不使用。
你也可以使用逻辑或运算符||将两个比较表达式联接在一起成为一个复合表达
式,只要有一个表达式的值为true,复合表达式的值就为true。如下所示:
if((x==7)||(y==15)){
gotoAndPlay(20);
}
在该脚本中,只要x为7或者y为15,或者两者都成立,结果都是跳转到第20
帧。只有当两者都不成立时,才不会执行gotoAndPlay命令。在Flash的早期
版本中使用or执行逻辑或运算,现在已推荐不使用。
3.4.5循环
ActionScript中的循环要比if语句稍微复杂一点。它的循环结构与C语言中的循
环结构几乎是一致的。
1.for循环结构
for结构是主要的循环结构,其样式如下所示:
for(vari=0;i<10;i++){
trace(i);
}
运行这段代码,随着局部变量I的改变,输出窗口中将显示数字0~9。
for结构中关键字for后面的括号中包含3个部分,它们之间用分号隔开。
第1部分声明一个局部变量,在本例中创建了一个局部变量i并将其设置为0。
该部分只在循环体开始执行之前执行一次。
第2部分作为一个供测试的条件,在这里,测试i是否小于10。只要满足该条
件,就会反复执行循环体。循环开始的时候i等于0,它是小于10的,所以循
环得以执行。
第3部分是一个运算表达式,每完成一次循环都将执行该表达式一次。在这里,
i每次递增1,然后转到第2部分对i的新值进行判断。
大括号中的部分是该循环的循环体,每执行一次循环都将执行其中的所有命令。
我们来看看计算机是如何处理这个循环的。
声明变量i并将其值设为0;
判断条件i<10,结果为true,开始执行循环体;
现在i值为0,trace命令将i值发送到输出窗口,输出窗口显示0;
第1次循环结束,回到循环开始处,i在原来的基础上递增1,i值变为1;
判断条件i<10,结果为true,继续执行循环体;
trace命令将i的值1发送到输出窗口;
然后i再加1,这样循环下去直到执行完10次循环;
回到循环开始处,i在原来的基础上递增1,i值变为10;
判断条件i<10,结果为fal,结束循环,开始执行for结构后面的代码。
2.其他形式的循环结构
for循环是最常用的一种循环结构,除for循环之外还有while循环和do„while
循环。
while循环的例子如下所示:
i=0;
while(i!=10){
trace(i);
i++;
}
while循环看起来似乎要比for循环简单一些,从结构上看甚至与if语句还有一
些相似。只要while后面括号中的条件成立,循环就会一直进行下去,所以在
while循环体中需要有改变条件的语句,以使条件最终能够为fal,完成循环,
如上例中的i++。
与while循环相似的是do„while循环,如下所示:
i=0;
do{
trace(i);
i++;
}while(i!=10);
除了测试条件的位置不同,while循环和do„while循环几乎是一样的。while循
环在循环体之前测试条件,do„while循环在循环体之后测试条件,所以do„
while循环至少要执行一次,而while循环有可能一次也不执行。
3.跳出循环
所有的循环结构都可以使用两个命令改变循环的执行流程,一个命令是break,
另一个命令是continue。break命令终止循环,并跳到循环结构后面的语句处执
行;continue命令终止本轮循环但不跳出循环,进而执行下一轮循环。
使用break和continue的例子都比较复杂,另外,还有一种特殊的for„in循环
结构,在用到它们的时候我们再详细讲解。
3.4.6函数
到现在为止,我们都是将脚本放在影片的第1帧中。如果程序相当复杂,再放在
同一帧中就使脚本显得太庞大了。
函数使你可以组织需重用的代码,并放在时间轴中,例如:
functionmyFunction(myNum){
varnewNum=myNum+5;
returnnewNum;
}
函数以关键字function开头,function后面是函数名。与变量名相似,你可以指
定自己的函数名,最好将函数名取得有意义一些。
函数名后面的括号容纳该函数的参数,所谓参数也是一个变量,它的值在调用该
函数时予以指定。一个函数可以有若干参数,也可以没有参数。无论有没有参数,
函数名后都应紧跟一对括号。
大括号中的部分是函数体,在函数体中创建了一个局部变量newNum,将
myNum加5的结果设置为newNum的值。如果你将10作为参数传递给该函数,
newNum的值就是15。
return命令仅用于函数中,使用return结束一个函数并返回函数值。此处,
newNum是用return命令返回的函数值。
要使用函数,就需要调用它,如下所示:
vara=myFunction(7);
该语句创建一个新的局部变量a,将7作为参数调用函数myFunction,并将函
数返回的结果作为变量a的值。
被调用的函数开始运行,创建一个局部变量myNum,将7作为myNum的值,
然后执行函数体内的代码,使用return命令将newNum的值12返回给函数的
调用者。这时,a的值变为12。
函数最大的作用体现在它可以重复使用。如下所示的3行代码产生3个不同的
结果:
trace(myFunction(3));
trace(myFunction(6));
trace(myFunction(8));
运行以上代码,你将得到结果8、11和13。
使用函数还有一个好处就是可以只改变函数中的一处,从而影响所有调用该函数
的命令。例如,将函数myFunction中的varnewNum=myNum+5改成var
newNum=myNum+7,上面3个调用该函数的命令的结果将变成10、13和15
3.4.7点语法
ActionScript中一个很重要的概念是点语法。点语法也是很多面向对象的编程语
言中用来组织对象和函数的方法。
假设你想求一个数的绝对值,Flash中有一个内置的绝对值函数,它包含在
ActionScript的“对象”/“核心”/“Math”/“方法”中。要使用绝对值函数,
首先要使用对象名,即Math,然后是方法名abs,它们之间用符号“.”隔开,
具体表示方法如下所示:
vara=(-7);
点语法的另一个用途是指定影片剪辑的属性。如下面的语句将影片剪辑myMC
的_alpha(透明度)属性设置为50%:
myMC._alpha=50;
你还可以在影片剪辑中使用点语法定位根(root)中的一个全局变量。如果你在
主时间轴中创建了一个全局变量globelVar,而要在影片剪辑中使用这个全局变
量,可以使用如下的语句:
trace(_Var);
如果你现在对对象、影片剪辑属性、层级之类的概念还不熟悉,不用着急,在以
后的内容中我们将对它们进行更深入的讲解。
3.4.8注释
我们可以在Flash的动作面板中添加注释,注释就是程序中并不参与执行的那些
代码。它可以用来提醒你某些代码的作用,方便你组织和编写脚本。一个注释的
例子如下所示:
//将影片剪辑myMC的透明度设置为50%
myMC._alpha=50;
该例的第1行是注释,注释以双斜线//开头,在//后面你可以输入任意的文本和
符号,Flash会自动将注释部分用灰色标示。
上例是将注释专门放在一行中,你也可以将注释放在一行代码的后面,如下所示:
myMC._alpha=50;//将影片剪辑myMC的透明度设置为50%
只要使用//符号,Flash就会忽略它后面的部分。
3.5调试脚本
无论在编写程序时有多么细心,每个程序员都避免不了要调试程序。要学好
ActionScript,你就得熟练掌握调试程序的方法。在FlashMX中调试程序有3
种方法:逻辑推断、向输出窗口发送信息和使用脚本调试器。
3.5.1逻辑推断
许多程序错误其实很简单,也很容易解决,并不需要专门的调试工具。当程序出
现错误时,你应对错误出现在哪里有一个大致的把握。
就算你不知道问题出在哪里,但通过细心阅读代码,你也有可能找到它。你可以
思考一下,你要实现的效果是什么?现在的效果与你的设想有多大差距?是什么
原因造成了这种差距?修改哪些部分有望改正这种错误?经过反复思考、修改和
调试,你对程序的理解就会不断加深,你的程序也会越来越趋于正确。
没有人比你更了解你自己的程序,所以对你来说,你编写的程序最先宜采用逻辑
推断的方法进行调试。还有一些错误或漏洞隐藏得比较深,这就需要借助于调试
工具。
3.5.2输出窗口
输出窗口是一个简单而实用的调试工具,在程序中可以使用trace命令将特定的
信息发送到输出窗口中,这些信息可以帮助你了解代码的运行情况。
前面我们已经介绍过输出窗口,这里就不再赘述了。
3.5.3调试器
调试器是一个更专业的调试工具,它是FlashMX中的一个窗口,通过调试器可
以查看影片中的各种数据以及ActionScript代码的运行情况。
选择“控制”→“调试影片”命令,或按快捷键Ctrl+Shift+Enter,开始调试影
片。与测试影片不同的是,调试影片时多了一个调试器窗口
调试器窗口中包含很多窗格,在左边的窗格中可以检查Flash影片中不同类型的
对象,右边的窗格显示影片中所有的ActionScript。
在调试器窗口中可以设置断点,断点即是为某行代码添加的一个标记,当调试影
片时,影片会自动在断点处停止,允许你查看当前包括变量值在内的的影片状态。
使用断点可以使你逐行地执行代码,对每行代码的运行结果进行观察和分析。
初学ActionScript的时候,你可能并不需要使用调试器;但是当你成长为一名经
验丰富的程序员时,你就会发现它对你是非常有用的。
第4章影片播放控制
控制影片播放流程的命令有许多,如下所示:
stop:使影片停止在当前时间轴的当前帧中。
play:使影片从当前帧开始继续播放。
gotoAndStop:跳转到用帧标签或帧编号指定的某一特定帧并停止。
gotoAndPlay:跳转到用帧标签或帧编号指定的某一特定帧并继续播放。
nextFrame:使影片转到下一帧并停止。
prevFrame:使影片回到上一帧并停止。
stop命令常常用在帧动作中,以使影片停止并等待用户控制。其他命令常常用
在按钮的事件处理函数中。
4.1使影片停止
最简单的ActionScript恐怕要算stop命令了,当执行stop命令的时候,影片在
当前的帧处停止播放。
你可以将stop命令放到时间轴的某一关键帧中,在stop后面需要紧跟一对括号,
如下所示:
stop();
执行stop命令时,影片只是暂停在当前帧,在影片中嵌入的影片剪辑或图形元
件继续播放,停止的仅仅是主时间轴中的动画。
要让影片继续播放,需要用到ActionScript的另一个命令play。play命令使影片
转到下一帧并继续播放。
我们将在按钮部分介绍play命令,下面以一个例子的形式介绍stop命令的使用,
其操作步骤如下:
(1)启动FlashMX,在时间轴中插入两个空白关键帧,使时间轴包含3个空白
关键帧。
(2)在3个关键帧中使用文本工具分别添加字符1、2、3。
(3)选中第2帧,按F9键打开动作面板,在其中添加如下的ActionScript:
stop();
(4)按Ctrl+Enter测试影片,影片播放到第2帧即停止,你将看不到第3帧。
4.2跳转到指定帧
另一个基本的ActionScript命令是gotoAndPlay。该命令使影片从当前帧跳转到
指定的任意一帧。可以用帧编号或帧标签指定一帧,如下所示:
gotoAndPlay(9);
gotoAndPlay("myFrame");
如果影片中不止一个场景,你也可以指定要跳转到的特定场景的特定帧。如果
gotoAndPlay命令中只有一个参数,Flash将认为它代表某个帧;如果有两个参
数,第1个参数将作为场景名,第2个参数代表该场景中的帧。如下所示:
gotoAndPlay("myScene",1);
它表示跳转到场景myScene的第1帧继续播放。
gotoAndPlay命令使影片跳转到某一特定帧并从该帧开始继续播放,如果要使影
片跳转到某一特定帧并在该帧位置停止,就应该使用gotoAndStop命令。它的
使用方法与gotoAndPlay命令相似,仅仅是跳转帧后执行的动作不同罢了。
还有两个实现跳转帧动作的命令,它们是nextFrame和prevFrame。nextFrame
命令使影片从当前位置转到下一帧并停止,prevFrame命令使影片从当前位置转
到上一帧(即回退一帧)并停止。它们后面都必须使用括号。
要了解这些命令究竟如何使用,最好的方法就是使用按钮,下面我们就来看看如
何创建按钮。
4.2.1创建按钮
要创建按钮,可以选择“插入”→“新建元件”命令或按快捷键Ctrl+F8,你将
看到一个“创建新元件”对话框,在该对话框中你可以在影片剪辑、按钮和图形
这3种类型中选择要创建元件的类型。
选择按钮类型,单击“确定”按钮,Flash窗口将由主场景切换到按钮元件的编
辑场景。按钮元件的时间轴中有4个帧,分别是弹起(Up)、指针经过(Over)、
按下(Down)、和点击(Hit),它们代表了按钮的3种状态和热区(热区的形
状代表了按钮能在什么范围内感应到鼠标的动作)。
如果你在按钮的第1帧中放置一个图形,而在其他3个帧中不放置任何东西,
那么该按钮的3种状态和热区将是一样的。
要使按钮显示不同的状态,就需要在它的不同关键帧中创建不同的图形或影片剪
辑。
完成对按钮的创建后,可以单击舞台上方的场景名“场景1”回到主场景。
按F1或Ctrl+L打开库面板,你将看到库中增加了一个按钮,用鼠标将它拖到舞
台中。
4.2.2为按钮添加脚本
要为按钮添加脚本,首先得选中该按钮,然后按F9键打开动作面板。你也可以
在该按钮上单击鼠标右键,在弹出的快捷菜单中选择“动作”命令,这样也可以
打开按钮的动作面板。
在专家模式下输入如下脚本:
on(relea){
trace("Youareclikingme!");
}
按钮的脚本有特殊的语法,即必须以关键字on开头,以on开头的代码是一种
事件处理函数,即当特定事件发生时要执行的代码。在这里,特定事件就是
relea(松开鼠标),它是按钮最常用的事件。
按钮事件还有press、releaOutside、rollOver、rollOut、dragOver、dragOut
以及keyPress等。press是按下鼠标事件,它在relea事件之前发生,
releaOutside是在按钮上按下鼠标,并且在按钮外松开鼠标的事件,rollOver
是鼠标指针移到按钮所在热区的事件,rollOut是鼠标从按钮热区移出的事件,
dragOver是在鼠标指针位于按钮上方并已按下按钮的情况下,滑出按钮再滑回
按钮的事件,dragOut是当鼠标指针位于按钮内部,按下按钮然后滚动出按钮区
域的事件,keyPress是按钮响应在键盘上按下某些键时的事件。
某种事件的发生,会触发相应事件处理函数开始运行,上例中使用trace语句将
事件信息发送到输出窗口中,使你可以更好地了解具体按钮事件的含义。
4.3练习:演示文档
用Flash可以实现演示文档的功能,演示文档相当于我们常说的幻灯片,它可以
进行逐页展示。如果不使用脚本,Flash动画会很快地播放每一帧,要用Flash
制作演示文档就得对Flash添加控制命令。
我们用脚本使每一帧停止,要跳转到别的帧,就需要使用按钮。
制作演示文档的操作步骤如下:
(1)启动FlashMX,编辑前5帧。
(2)在文档中创建5个按钮,从库面板中可以看到它们。
(3)打开主时间轴第1帧的动作面板,其中添加了如下语句:
stop();
影片播放时,会停止在第一帧上。
(4)为图层2的第1帧和第5帧分别添加帧标签begin和end,
(5)选中第1帧中的“开始”按钮,打开其动作面板,在其中添加如下语句:
on(relea){
nextFrame();
}
单击“开始”按钮,停止在第1帧的影片会跳转到第2帧并停止。
(6)分别在第2~4帧的相同位置添加按钮“首页”、“上一页”、“下一页”、
“末页”。由于第5帧后面没有别的帧,所以只添加“上一页”和“首页”两个
按钮。
(7)为所有“首页”按钮添加脚本:
on(relea){
gotoAndStop("begin");
}
单击“首页”按钮,影片将跳转到帧标签为begin的那一帧并停止,即第1帧。
这里也可以用1替代"begin"。
(8)为所有“上一页”按钮添加脚本:
on(relea){
prevFrame();
}
单击“上一页”按钮,影片将从当前帧跳转到前一帧并停止。
(9)为所有“下一页”按钮添加脚本:
on(relea){
nextFrame();
}
单击“下一页”按钮,影片将从当前帧跳转到下一帧并停止。
(10)为所有“末页”按钮添加脚本:
on(relea){
gotoAndStop("end");
}
单击“末页”按钮,影片将从当前帧跳转到帧标签为end的那一帧并停止,在
此处也即是第5帧。
(11)按Ctrl+Enter键测试一下影片,单击各个按钮试一下效果。这些添加了
ActionScript的按钮是不是变得非常听话?
第5章控制影片剪辑
影片剪辑是Flash中最重要的一种元件,对影片剪辑的控制是ActionScript的最
重要功能之一。从根本上说,Flash的许多复杂动画效果和交互功能都与影片剪
辑的运用密不可分。
使用点语法或方括号可以定位影片剪辑。使用方括号时可以使用由变量表示的影
片剪辑实例名,这是它相对于点语法的优点。
可以用脚本控制影片剪辑的各种动作,也可以在影片剪辑的事件处理函数中控制
主时间轴和别的影片剪辑。影片剪辑最重要的两个事件是load和enterFrame。
5.1控制影片剪辑的播放动作
设想一个Flash动画,它的主场景中只有一个帧,舞台中只有一个影片剪辑,影
片剪辑中并没有ActionScript。如何才能控制影片剪辑的播放动作呢?
要控制一个影片剪辑,首先应该为影片剪辑命名。容易混淆的是,库面板中的影
片剪辑本身有一个名称,这里要命名的是场景中影片剪辑实例的名称。它们可以
相同,也可以不相同。如果你在场景中创建了同样的影片剪辑的多个实例,那么
就需要将每个实例以不同的名称命名,才能用ActionScript对每一个实例进行控
制。如果不需要对影片剪辑进行控制,也就不需要为影片剪辑的实例命名。
从本例文件中,你将看到库面板中只有一个影片剪辑rollmc,场景中创建了一个
rollmc的实例。你还可以再从库中拖出若干个rollmc的实例将它们放置到场景
中。
选中场景中影片剪辑rollmc的实例,打开属性面板,可以看到它被命名为roll,
你同时可以看到该影片剪辑原来的名字rollmc。你也可以为它指定别的名称,也
可以是rollmc,Flash并不会混淆它们之间的区别。实例名称可以在程序中用来
指代该影片剪辑实例,如果要控制该实例,就需要在脚本中使用该名称。下面,
我们就来看看如何通过脚本控制影片剪辑实例roll。
分别选中场景中的4个按钮,打开它们的动作面板,查看其中的代码。
“STOP”按钮:
on(relea){
();
}
单击“STOP”按钮使roll实例停止播放。
“PLAY”按钮:
on(relea){
();
}
单击“PLAY”按钮使roll实例继续播放。
“PREV”按钮:
on(relea){
ame();
}
单击“PREV”按钮使roll实例回退一帧并停止。
“NEXT”按钮:
on(relea){
ame();
}
单击“NEXT”按钮使roll实例播放一帧并停止。
按Ctrl+Enter键测试影片,如图5-2所示。一开始影片剪辑自动播放。单击不同
的按钮看看影片剪辑是否执行相应的动作。
除了这几种命令,你还可以使用gotoAndStop或gotoAndPlay命令控制影片剪
辑跳转到具体的帧,但是在命令前面都需要指定影片剪辑的实例名称。
这种方法是在影片剪辑实例所在的层级中控制影片剪辑,如果是在影片剪辑内
部,要控制它自身的播放,就可以直接使用stop、play等命令,而不需要指定
实例名称。如果你在影片剪辑内部的时间轴中使用了名称roll,Flash会在影片
剪辑内部的时间轴中寻找该实例。
5.2定位影片剪辑
我们已经了解了如何使用最简单的方法定位一个影片剪辑,即使用影片剪辑的实
例名,后面紧跟一个点记号“.”,然后是你想要影片剪辑执行的命令。
还有许多方法可以定位影片剪辑。首先,我们来看看如何定位Flash影片中不同
层级的对象。
Flash影片中最基本的目标层级就是它的主时间轴。可以用关键字_root来表示
和定位主时间轴。
例如,你要向主时间轴发送一个gotoAndStop命令,可以使用如下所示的语句:
_dStop(9);
如果这个命令是包含在主时间轴的某一帧上的,则可以省略目标_root。如果这
个命令是包含在主时间轴上某个影片剪辑中,需要由影片剪辑来控制它上一级的
主时间轴,_root就很有必要了。
通常,要定位包含某一对象的上一级对象,可以使用关键字_parent。所以,如
果一个影片剪辑是包含在主时间轴中,在影片剪辑中使用_parent和_root的效果
是一样的。如果影片剪辑与主时间轴相差两个层级,即当影片剪辑包含在另一个
位于主时间轴中的影片剪辑中,这时在该影片剪辑中使用_parent指代的是它上
一级的影片剪辑,而_root是指它上两级的主时间轴。在主时间轴中不能使用
_parent,因为主时间轴没有上一级。
可以用数字来方便地说明这种层级关系。主时间轴,它始终是最初级,作为层级
0。主时间轴中的一个影片剪辑处于层级1。如果影片剪辑中包含另一个影片剪
辑,它处于层级2。对层级2上的影片剪辑来说,_parent指代的就是层级1上
的影片剪辑,而不管对哪一级来说,_root始终指代层级0上的主时间轴。
除了用点记号连接_root和实例名,还可以使用方括号表示_root上的对象。对上
例中的按钮“STOP”来说,如下所示的3种方法作用是一样的:
();
_();
_root["roll"].stop();
还有一个关键字this,它代表脚本当前所在的层级。如果脚本位于主时间轴中,
this即指代主时间轴;如果脚本位于影片剪辑中,this即指代该影片剪辑。所以
以上语句还可以用以下两种方式表示:
();
this["roll"].stop();
使用_root和this时还可以用变量来定位影片剪辑,如下所示:
varmcInsName="roll";
_root[mcInsName].stop();
今后我们会遇到这种情况,即有roll0~rool99共100个影片剪辑实例,可以使用
下面的语句来控制它们:
on(relea){
for(vari=0;i<100;i++){
_root["roll"+i].stop();
}
}
多数情况下我们习惯使用_root,但在某些情况下使用this比_root更简便。如要
在某个影片剪辑中定位包含在此影片剪辑中的另一影片剪辑childMC,就可以
直接使用C。
5.3为影片剪辑添加脚本
现在你已经知道如何向帧和按钮中添加脚本,下面需要知道如何向影片剪辑中添
加脚本。
要为影片剪辑添加脚本,首先要选中影片剪辑,再打开它对应的动作面板,然后
在其中输入脚本。影片剪辑脚本和按钮的脚本类似,它们都使用事件处理函数,
与按钮的on关键字不同,影片剪辑使用onClipEvent关键字。当某种影片剪辑
事件发生时,就会触发相应的事件处理函数。
影片剪辑最重要的两种事件是load和enterFrame。
load事件在影片剪辑完全加载到内存中时发生。在每次播放Flash影片时,每个
影片剪辑的load事件只发生一次。
在主时间轴停止播放时,影片中的影片剪辑并不会停止播放,这个特性决定了影
片剪辑的另一个事件enterFrame的重要性。enterFrame事件在影片每次播放到
影片剪辑所在帧时发生。如果主时间轴中只有一帧,且不论它是否在该帧停止,
该帧中的影片剪辑都会不断触发enterFrame事件,且触发的频率与Flash影片
的帧频一致。
影片剪辑事件的使用方法如下所示:
onClipEvent(load){
vari=0;
}
onClipEvent(enterFrame){
trace(i);
i++;
}
当影片剪辑的load事件发生时,将变量i设置为0。当影片剪辑的enterFrame
事件发生时,向输出窗口中发送i的值,然后将i加1。输出窗口中会从0开始
输出以1递增的数字序列,直到影片被关闭为止。
为了熟悉影片剪辑事件处理函数的用法,我们来为影片剪辑编写一段简单的脚
本,使影片剪辑逆序播放,
我们将从影片剪辑的最后一帧处开始播放,使用prevFrame命令使影片剪辑每
次后退一帧。
本例文件场景中有一个影片剪辑元件rollmc,查看一下它的属性面板,并没有为
其实例命名,这是因为我们要直接在影片剪辑的动作面板中添加脚本,并不需要
用到实例名称。
选中影片剪辑rollmc,此时动作面板的标题栏中应为“动作-影片剪辑”。打开
动作面板,其中添加了如下ActionScript:
onClipEvent(load){
gotoAndStop(40);
}
onClipEvent(enterFrame){
prevFrame();
}
在事件处理函数onClipEvent(load)中,令Flash影片的播放头转到影片剪辑的
第40帧(即最后一帧)。这个事件处理函数只在影片剪辑被加载完成时执行1
次。第2个事件处理函数onClipEvent(enterFrame)每播放1帧就执行1次,使
影片剪辑回退1帧。
按Ctrl+Enter键测试影片,你将看到齿轮以与上例相反的方向转动,直到影片剪
辑的时间轴回到第1帧,prevFrame命令不起作用,影片剪辑停止播放。要让
它连续不断的播放,可以在影片剪辑元件rollmc的时间轴第1帧的动作面板中
添加如下语句:
gotoAndStop(40);
5.4用影片剪辑控制别的影片剪辑
一个影片剪辑可以控制别的影片剪辑。综合使用_root或_parent关键字、点符号
和影片剪辑实例名称可以将命令发送给另一个影片剪辑实例。例如,在主时间轴
上的影片剪辑实例roll1中添加如下脚本以控制同在主时间轴上的影片剪辑实例
roll2回退1帧:
_ame();
或者使用方括号表示如下:
_root["roll2"].prevFrame();
如果两个影片剪辑不同在主时间轴上,而是同在别的层级上,可以使用_parent
关键字。如果它们不同在一个层级上,也只需要使用点符号逐级标明所在的路径
即可。
下面综合运用以上知识实现以影片剪辑控制另一个剪辑的播放动作。
(1)打开本例文件。分别查看场景中的每一层。按Ctrl+L打开库面板。库面板
中有三个影片剪辑元件,分别是hour、minute和cond。
(2)分别双击每个影片剪辑元件,查看它们的时间轴。
(3)cond元件的的时间轴共60帧,condhand图形元件顺时针旋转1周。
在第1帧中添加了如下ActionScript:
stop();
在最后1帧中添加了如下ActionScript:
_root[target].nextFrame();
gotoAndStop(1);
(4)minute元件的的时间轴共60帧,minutehand图形元件顺时针旋转1周。
在第1帧中添加了如下ActionScript:
stop();
在最后1帧中添加了如下ActionScript:
_root[target].nextFrame();
gotoAndStop(1);
(5)hour元件的的时间轴共12帧,hourhand图形元件顺时针旋转1周。在第
1帧中添加了如下ActionScript:
stop();
(6)回到主场景,在属性面板中为hour影片剪辑和minute影片剪辑指定了与
元件名称相同的实例名称。
(7)选中cond元件实例,打开其动作面板,其中添加了如下ActionScript:
onClipEvent(load){
target="minute";
}
onClipEvent(enterFrame){
nextFrame();
}
(8)选中minute元件实例,打开其动作面板,其中添加了如下ActionScript:
onClipEvent(load){
target="hour";
}
以上脚本的原理是:使每个影片剪辑都在各自的第1帧停止。在cond的
enterFrame事件中令其自身移到下一帧。直到cond元件转动完一周,到达
最后一帧,使用_root[target].nextFrame();命令将target所指目标后移1帧,这
里的target是在cond影片剪辑实例的load事件中定义的,也就是minute。
同样,直到minute元件转动完一周到达最后1帧,使用_root[target].nextFrame();
命令将target所指目标后移1帧,这里的target是在minute影片剪辑实例的load
事件中定义的,也就是hour。
由于影片剪辑的转动是由nextFrame命令实现的,所以在每个元件内部时间轴
的最后1帧中添加了跳转到第1帧的语句,避免停止在最后1帧上。
上面的ActionScript主要有两种,一种是在影片剪辑内部时间轴上的帧脚本,另
一种是在主时间轴中的影片剪辑脚本。我们使用一个全局变量target记录影片剪
辑实例名称,这个动作是在影片剪辑的事件处理函数中完成的,然后将这个全局
变量应用到影片剪辑内部的帧脚本中。从这里也可以看到,影片剪辑动作和影片
剪辑内部的帧动作是可以进行通信的,全局变量在它们之间有效,但在两个影片
剪辑之间就变得无效,所以我们可以在两个影片剪辑中同时使用target而互不影
响。
(9)按Ctrl+Enter测试影片
本文发布于:2023-02-03 13:47:04,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/fan/88/182723.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |