Skip navigation.

exploreopera

| Help

Sign up | Help

C.Apollo

山间的竹屋

FLASH语言B

ActionScript脚本教程

第1章 揭开ActionScript的神秘面纱
第2章 Flash MX的动作面板
第3章 ActionScript编程初步
第4章 影片播放控制
第5章 控制影片剪辑
第6章 影片剪辑属性
第7章 影片剪辑方法
第8章 响应键盘
第9章 输入文本和字符串
第10章 动态文本
第11章 Math对象
第12章 Color对象
第13章 Date对象
第14章 Sound对象
第15章 实现与服务器的交互
第16章 XML运用
第17章 Flash UI组件
第18章 用ActionScript画图


第1章 揭开ActionScript的神秘面纱


ActionScript是Flash内置的编程语言,用它为动画编程,可以实现各种动画特效、对影片的良好控制、强大的人机交互以及与网络服务器的交互功能。
ActionScript是一门吸收了C++、Java以及JavaScript等编程语言部分特点的新的语言。ActionScrip使用英文单词和元件提供了一种为Flash影片设置指令的方法。它的存在确保了Flash影片较之普通的按照线性模式播放的动画具备强大得多的人机交互能力。
可以为时间轴中的关键帧、按钮和影片剪辑添加ActionScript。选中这些关键帧、按钮和影片剪辑,打开其动作面板,你就可以看到它们都添加了哪些脚本。

1.1 Flash中的程序
交给计算机执行的指令集称为程序。程序的另一个名称叫做脚本。从现在开始,我们将这些指令集统称为脚本。
脚本都必须有它的运行环境,就ActionScript来说,它的运行环境就是Flash影片。ActionScript可以指挥Flash影片该做什么。在某些情况下,ActionScript还可以指挥其他的东西,如用户的操作系统、浏览器等。但是ActionScript最主要的用途还在于控制Flash影片内部的东西。
短的脚本可以只有一行,长的脚本可以长达几千行。它们可以作用于Flash影片的一个部分,也可以贯穿影片始终。有人把使用了脚本的整个Flash影片看作一个程序,也有人把影片中单独出现的脚本看作一个程序。这两种看法都正确,因为一个单独的程序也可以被定义成若干小程序。
你可能对某些编程语言已经相当熟悉或者有所了解。例如广大网页设计者所熟知的JavaScript,以及另一种相似的语言VBScript,它们能用来编辑动态网页。HTML(Hypertext Markup Language 超文本置标语言)是另一种特殊的语言,浏览器将按照它所包括的指令正确地显示文本和图片。
在学校里面,你可能接触过一些编程方面的课程,如BASIC、Pascal、C、Java等。
除HTML以外,以上提到的所有的语言都包含很相似的程序结构:循环、条件、变量等等。只要你知道了ActionScript的特殊用法,你就可以将以前所学的编程知识利用起来。就算你以前从来没有接触过编程方面的知识,不用担心,我会将所有需要的知识都告诉你。
1.2 ActionScript是从哪里来的
ActionScript是从哪里来的呢?事实上它的确是从好几种程序语言中深化而来的。下面我们先花一点时间了解一下计算机语言的起源和发展。
当第一台数字计算机诞生的时候,唯一的编程语言是计算机的专用语言——二进制代码,即由数字1和0组成的编码。当由1和0组成的不同序列被输入到计算机中,计算机就会执行完全不同的操作。使用这种语言编写程序是相当费劲的,就算写一个简单的两数相加的程序,程序的长度也是相当惊人的。
为了避免每次都为两数相加的操作书写长长的二进制程序,有人书写了一种专门用于两数相加的代码,你可以方便地使用相同的代码实现任意两数的相加操作。接着,一些类似的函数诞生了,用它们可以处理所有的基本任务,如加、减、乘、除、比较、循环等等。从此以后,你可以使用这些事先编写好的函数执行几乎所有的操作了。
现代的计算机语言理解和使用起来较之二进制编码都已经容易了无数倍,其一,现代计算机语言与英语语法很相似,如“go”、“for”、“begin”、“if”以及+、-、=等,它们的含义和用法与现实中都相差不大。
BASIC、Pascal等编程语言,几乎可以像英语句子一样阅读,所以学习和理解起来都非常容易。其他语言,如C、Fortran,它们的功能更强一些,经验丰富的程序员可以用它们完成更复杂的任务。更多的语言居于以上两种语言之间,如C++、Java和JavaScript,它们既有一定的可读性,也有较强的功能。ActionScript与这些语言有更多的相似之处。
Flash遵从ECMA(European Computer Manufacturers Association欧洲计算机工业协会)制定的标准,因此ActionScript与ECMAScript(ECMA开发的一种语言)极其相似。所以与其说ActionScript建立在JavaScript的基础上,不如说ActionScript和JavaScript都建立在共同的基础之上。
Flash具备交互功能,它的早期版本已能够利用简单的脚本实现不太复杂的导航和按钮。同时,Flash还是一种矢量动画工具,它的发展是与对它的应用需求分不开的,比如说网页设计者需要一种工具来制作体积更小的图像,由于矢量图是由线条和填充色构成的,而不是像位图一样由像素构成,所以它能够大大缩减文件大小,正顺应了网页设计者的需求,使许多系统配置低的用户也能够访问和浏览他们的网页。
虽然说Flash是一个图形动画工具,但也不是没有使用程序的需要,比如说设计者需要制作一个按钮,让别的用户能通过单击按钮浏览到别的页面。
Flash早期版本中的脚本非常简单,直到Flash 4,才具有了标准的程序结构,如条件结构、循环结构等。但是Flash脚本仍然需要使用下拉菜单和空白文本框添加,几乎还不能叫做一种编程语言。
真正的ActionScript到了Flash 5才出现,程序员可以直接键入程序并将程序添加给需要作用的元素。Flash MX更大地扩展了ActionScript,现在的ActionScript提供了多达300余种命令、函数、运算符和结构,这才真正成为一种成熟的程序语言。
1.3 初识ActionScript
脚本是由英语单词、数学符号和函数构成的,下面是一个ActionScript的例子:
on (press) {
gotoAndPlay ("my frame");
}
你可以通过其中的关键单词推测这段程序的作用。单词press表示按,即用鼠标在某种对象上面单击,这里的对象就是按钮。第二行中的长单词可以分开读成“go to and play”,可以将其理解为命令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影片的播放环境,如获取系统时间,获取Flash Player的版本信息等。
= 控制声音
ActionScript可以方便地控制声音的播放,甚至控制声音的声道平衡和音量等。
1.4 ActionScript放在哪里
初学ActionScript的Flash爱好者最想问的问题恐怕是“ActionScript应该放在哪里?”
Flash是一种复杂的多媒体编辑环境,如果你曾经使用过Flash,或者看过Flash MX附带的教程,你就应该知道Flash中的一些基本术语或元素。在Flash的元素中有3个地方可以放置脚本。
1.4.1 时间轴
Flash影片中的每个场景都有时间轴,时间轴上的每个关键帧都可以放置脚本。并且,你还可以在每一个关键帧的不同层上放置不同的脚本。
在主时间轴中放置脚本之前,需要先选择一个关键帧。启动Flash时,时间轴中有一个空白关键帧
当选中一个关键帧后,你就可以打开动作面板,查看里面的脚本或者开始编写你自己的脚本了。
有几种方法可以打开动作面板。你可以选择“窗口”→“动作”命令,或者按快捷键F9。
如果你对Flash复杂的影片浏览器比较熟悉,你也可以在影片浏览器中查看整个Flash影片所用到的脚本。打开影片浏览器的快捷键是Alt+F3。
如图1-2所示即为Flash MX的动作面板。该动作面板被命令为“动作-帧”,这是因为其中的脚本将作用在帧上。如果是新建的一个影片,动作面板将是空的。后面我们将在动作面板中添加各种各样的脚本。第2章我们将看到如何使用动作面板。
时间轴中的脚本将在Flash影片播放到脚本所在的关键帧位置时自动执行。例如,如果你为某一关键帧添加了stop()命令,当影片播放到那一帧位置时就会自动停止。要让影片继续播放,只有在其他的脚本中添加相应的命令。
在时间轴中添加脚本还有一个好处就是方便你在ActionScript中使用函数。函数是可以重复使用的脚本代码,要想使整个影片都可以调用脚本中的函数,就必须将函数放置在主时间轴中。
1.4.2 按钮
Flash中的元素又称作元件(symbol)。元件主要有3种:图形(graphic)、影片剪辑(movie clip)和按钮(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章 Flash MX的动作面板


动作面板是Flash MX面板系统的一部分,ActionScript程序员经常会用到它。为了成长为一名娴熟的Flash编程高手,你有必要对Flash的动作面板和在线帮助系统相当的熟悉。
动作面板的标准模式允许你从脚本目录中选择关键字并设置相应的选项,而专家模式为程序员提供了直接输入代码的自由。

2.1 了解动作面板
Flash MX的面板系统向你提供了查看和设置Flash中各种元素信息和属性的捷径。第一次启动Flash MX的时候,系统将会询问你要使用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或Back Space键删除不需要的命令。
和 按钮的右边还有几个功能不一的按钮。 按钮使你可以从脚本中查找文本, 按钮使你可以替换文本,使用 按钮可以插入目标路径, 按钮可以为你调试脚本设置断点, 和 按钮使你可以选择脚本的前一行或后一行。
在动作面板的底部你可以看到这样的一行:“第1行:gotoAndPlay(1);”,这是动作面板的状态行,它显示了当前选中的行号和该行的内容。
2.3 分类目录
动作面板左边的目录将ActionScript的关键字有组织地分成几组,以使你更容易查找到需要的关键字的位置。以后我们会对每个组中的命令和符号作详细的讲解,下面先对其进行一下简要的介绍。
= 动作
在动作类中包含了最简单的ActionScript命令。动作类提供了测试条件、循环、创建函数、复制和创建影片剪辑以及从服务器中获取数据等功能的命令。动作类中的命令是ActionScript最重要的组成部分。动作类又分为影片控制、浏览器/网络、影片剪辑控制、变量、条件/循环、打印、用户定义的函数以及其他动作等子类。
= 运算符
它包括了各种数学和比较运算符,如+号,用于两数相加;==号,用于判断两数是否相等。运算符类下面又分为按位、比较、赋值、逻辑、算术和其他运算符等子类。
= 函数
使用函数可以转换数据或获取需要的信息,如获取Flash的版本信息。你可以使用函数将字符串123转换成数字123。你还可以自定义需要重复使用的函数。在函数类下面主要有两个子类:数学函数和转换函数。
= 常量
常量类中包含了一些具有特定值的特殊关键字,如true、false、null和newline等。
= 属性
属性类中的关键字反映了Flash中元素的相关信息。例如_x属性代表影片剪辑在屏幕中的水平位置。
= 对象
对象类是最复杂的一类,它包含了ActionScript中的众多概念。所有的对象关键字被分成4个子类:核心、影片、客户端/服务器、创作。影片剪辑是影片类下面的一种,它包含了与控制影片剪辑相关的关键字。Math是核心下面的一种,它包含了求平方根、正弦值等数学函数。
= 否决的
这一类中的关键字是已经作废但Flash MX仍然支持的,在Flash MX中请尽量避免使用,因为在以后的Flash版本中将不再支持这些关键字。
= Flash UI组件
这一类中的关键字包含了特殊功能的组件,如单选按钮、滚动条等。
= 索引
索引类将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.3 HTML帮助文档
如果要获得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可以打开“替换”对话框。
“转到行…”命令可以快速转到并选中指定的行。
“语法检查”命令或按钮 可以对窗口中的脚本进行语法检查,如果没有语法错误,将提示你“此脚本中没有错误。”
通常,语法检查只能检查出代码中的明显语法错误,它并不能检查脚本是否能正确运行。经常会发生这样的事情,就是每一行的代码都是正确的,但所有的代码加在一起却导致了错误。
语法检查功能很实用,特别是对初学者来说,它能方便地检查出误用运算符或缺失括号等情况。
“自动套用格式”命令可以按预先设置的样式和缩进等设置脚本的格式。你可以选择“自动套用格式选项”命令,在“自动格式选项”对话框中重新设置要应用的格式,
另外,选择“首选项…”命令可以设置动作面板中脚本代码的颜色、制表符宽度、字体等。你也可以在Flash MX的菜单栏中选择“编辑”→“首选参数”命令,在打开的“首选参数”对话框中选中“动作脚本编辑器”选项卡,打开相同的对话框,如图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或false的布尔值,循环结构使得程序能够重复执行一系列相同的指令。
变量是存储数据的容器,变量有变量名和变量值。
编程是一项需要耐心的工作,首先你必须理解要用程序解决什么样的问题,然后需要将这个问题分解成若干步骤,将每个步骤再分成更小的步骤,直到每个步骤都小得很容易解决了为止。
程序编写好后,可能会存在许多漏洞或缺陷,所以你还需要对程序进行调试,直到程序能正确运行为止。

3.1 程序基本结构
计算机程序是由命令、函数、运算符、条件和循环等结构组成的。
3.1.1 命令、函数和运算符
在此之前,我们都是用关键字来描述ActionScript中的元素,如关键字gotoAndPlay,它也是一个命令。
命令是ActionScript中用来告诉Flash所要执行的特定操作的元素。之所以称之为命令,就是因为它将被严格的遵照执行,如果要用gotoAndPlay跳转到一个不存在的帧,这样的命令就不能被执行。
命令是程序中最基本的元素,在Flash中如果不使用命令,几乎不能进行任何操作。从本书中你将学到很多命令。
函数是ActionScript中用来执行计算和返回结果的元素。例如,一个特定的函数可以计算并返回一个指定数的平方根。
命令和函数都可以使用参数。参数就是传递给命令或函数的一个值。如gotoAndPlay命令就至少需要一个帧编号或帧标签作为参数。求平方根的函数也需要一个数值作为参数。
与命令和函数不同的是运算符,它们主要是一些符号,而不是字母。例如,+运算符执行两数相加的操作。
在ActionScript程序中你将会用到大量的命令、函数和运算符。
3.1.2 变量
要编写复杂的计算机程序往往需要存储很多的信息。有时你可能只需要存储很短暂的时间,例如,如果需要重复执行10次相同的命令,你就需要对命令的执行次数进行记数,直到满10次为止。
所有的编程语言都使用变量来存储信息。一个变量由两部分构成:变量名和变量的值。
1.变量名
变量名通常是一个单词或几个单词构成的字符串,也可以是一个字母。总的来说,你需要尽可能地为变量指定一个有意义的名称。
例如,如果你要使用变量存储用户的姓名,用userName作为变量名将是一个很好的选择。如果你使用n作变量名,似乎太短了一点;如果使用name,又可能与影片中其他对象的名称相混淆。
在ActionScript中为变量指定变量名时已经形成了一种不成文的规范,就是变量名通常以小写字母开头,当一个新的单词出现时,大写这个新单词的第一个字母,如userName,长一点的例子如currentUserFirstName。
变量名中不允许出现空格,也不允许出现特殊符号,但是可以使用数字。
2.变量类型
你可以用变量存储不同类型的数据。数字是最简单的变量类型。
你可以在变量中存储两种不同类型的数字:整数和浮点数。整数没有小数点部分,如117、-3685都是整数。浮点数有小数点部分,如0.1、532.23、-3.7都是浮点数。
你也可以在变量中存储字符串,字符串就是由字符组成的序列,可以是一个或多个字符,甚至可以没有字符,即空字符串。
使用引号定义字符串,使其与其他变量相区别。如7是一个数字,而“7”则是一个字符串,这个字符串由一个字符7组成。
在别的编程语言中,你可能需要在程序的开头部分提前定义程序中要用到的变量的具体类型,但在ActionScript中不需要预先声明变量,你只需要直接使用它们,Flash在第一次遇到它们的时候会自动为它们创建变量。
另外,变量所能存放的数据类型也没有严格的限定,某一变量可以在一个位置存放字符串,而在另一个位置存放数字。
这种灵活性并不是经常用得到,但是它可以让程序员们少一些不必要的担心。
ActionScript程序员不必担心的另一个问题是废弃变量的空间回收问题。即当你不再需要使用一个变量的时候,你可能需要收回该变量占用的存储空间。大多数现代的计算机语言如ActionScript都可以自动回收空间,所以你也不必担心了。
除数字和字符串类型外还有一些别的变量数据类型。例如,数组可以存放一系列的数据而非单个数据。
3.1.3 条件
程序本身并不能作出抽象的决定,但是它可以获取数据,并对数据进行分析比较,然后根据分析结果执行不同的任务。
例如,你想要检查用户输入的名字并确定其至少包含3个字母。程序需要做的事情就是对用户名作出判断,如果是3个或更多的字母,就执行一种操作;如果不足3个字母则执行另一种操作。
这里,作出一个决定需要两步,第一步是检查条件是否满足,如果名称符合3个字母长度,条件满足,我们称条件的值为真(true);否则条件不满足,我们称条件的值为假(false)。所有的条件都必须是两个值中的一种,要么为真,要么为假。要么为真(true)要么为假(false)的数据类型称为布尔(boolean)类型。
决定的第二步是根据条件为true或为false的情况选择要执行哪些代码。有时只有一个选项,当条件为true时执行该选项;如果条件为false,将不执行任何代码。有时会有两个相对的选项,条件为true和false时分别执行不同的代码。
例如,你想让计算机根据一个变量的值是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.2 ActionScript之一角
当你在编写自己的脚本时,你会用到各种各样不同的关键字和符号,为便于你熟悉脚本的构成,下面先来看一个真实的例子。
这是一段作用于按钮的脚本,当用户单击按钮时(确切地说是松开按下的按钮时)执行它。其中没有包含特殊的函数,但是它体现了ActionScript的主要结构。
on (release) {
var myNumber = 7;
var myString = "Flash MX ActionScript";
for (var i=0; i<myNumber; i++) {
trace(i);
if (i + 3 == 8) {
trace(myString);
}
}
}
脚本的第1行表明当用户松开按下的按钮时执行大括号中的语句。on (release)结构只能用于按钮,其他相关的几种用法如on(press)、on(rollOver)、on(rollout)、on(dragOver)、on(dragOut)等。
第1行末尾的大括号{表示一段相对独立的代码段的开始。从{到与之相对的}之间的代码是一个整体,它们都从属于按钮的release事件。
请注意,大括号之后的代码较之第1行有一个制表符(按一次Tab键)的缩进,其后的每行代码与之具有相同的缩进程度,直到一个新的大括号开始,在新大括号后的语句会比前面的语句增加一个制表符的缩进,以此类推,这种特点与其他编程语言是类似的。Flash会自动将你添加的代码设置成正确的缩进样式。
代码的第1行创建一个名为myNumber的局部变量,并将该变量的值设置为7。下面一行将字符串Flash MX ActionScript赋给另一个变量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)启动Flash MX。
(2)选中时间轴的第1帧,打开第1帧的动作面板。
(3)使用右上角的菜单将动作面板切换到专家模式。
(4)在脚本编辑区单击鼠标,将鼠标光标定位到脚本编辑区中。
(5)在动作面板中输入如下ActionScript:
trace("I like ActionScript!");
(6)按Ctrl+Enter键测试影片,因为舞台中没有任何图像,所以你将看到一个空白窗口,同时出现一个输出窗口,窗口中显示:I like ActionScript!如图3-2所示。 输出窗口显示了trace命令中的信息
和动作面板一样,输出窗口右上角也有一个下拉菜单,其中包含了拷贝、清除、查找、保存到文件以及打印等命令。
下拉菜单的最后一项命令是“调试级别”,你可以选择“错误”、“警告”、“详细”中的一种,如果选择“无”,将不显示任何信息。
3.4 ActionScript基本语法
前面介绍了程序的基本结构,下面要讲解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,再发送到输出窗口中。
var myLocalVariable = 20;
myLocalVariable = 8;
trace(myLocalVariable);
如果没有特殊的需要,请尽量使用局部变量。
3.4.2 比较
在ActionScript中比较两个事物是很容易的,要进行比较可以使用标准的数学符号,如=、<、>等。
1.相等
在ActionScript中用比较运算符对两个值进行比较。
要比较两个值是否相等,可以使用连在一起的两个等于符号(==)。单个等于符号(=)是用来为变量分配值的,并不是比较运算符。
如果要比较变量x的值是否等于7,就可以使用==符号,如下所示:
var x = 7;
trace(x == 7);
以上代码使用=符号将变量x设置为7,然后使用==符号对x和7进行比较。
测试这两行代码,输出窗口将显示“true”。如果将x设置为8或其他数,则会显示“false”。
==符号还可以用来比较两个字符串。如下所示:
var myString = "Hello ActionScript.";
trace(myString == "Hello ActionScript.");
trace(myString == "hello ActionScript.");
程序运行时,你将在输出窗口中看到一个“true”和一个“false”,因为在字符串中字母是要区分大小写的。
如果你要比较两个值是否不等,可以使用!=符号,它的意思是“不等于”。如下所示:
var a = 7;
trace(a != 9);
trace(a != 7);
第1个trace语句显示信息“true”,因为a确实不等于9;第2个trace语句显示信息“false”。
2.小于和大于
使用标准的数学符号<和>比较两数是否成小于或大于关系。举例如下:
var a = 9;
trace(a < 10);
trace(a > 5);
trace(a < 1);
你将从输出窗口中看到“true”、“true”和“false”。
符号<=或>=用于比较一个数是否小于等于或大于等于另一个数,如下所示:
var a = 9;
trace(a <= 9);
trace(a >= 9);
trace(a >= 7);
以上3个trace语句都将显示“true”。
3.4.3 运算
通过运算可以改变变量的值。分别使用算术运算符+、-、*、/执行加、减、乘、除操作。
如下所示的ActionScript将值为9的变量x加上一个数7:
var x = 9;
x = x + 7;
trace(x);
运算结果为16。
在ActionScript中执行运算可以使用一些简写方法,如+=运算符将其前后的值相加并将结果赋给它前面的变量。前面的脚本也可以写成如下的形式:
var x = 9;
x += 7;
trace(x);
++运算符与+=运算符类似,但它每执行一次,变量的值只增加1,如下面的例子:
var x = 9;
x++;
trace(x);
结果显示10。再看下面的例子:
var x = 9;
trace(x++);
trace(x);
结果是9和10。为什么呢?因为第1个trace语句输出x的当前值9,然后将x加1,输出x的新值10。
再试一下下面的脚本:
var x = 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.else
对if语句可以进行扩展,使用else执行条件不成立(比较表达式为false)时的代码,如下所示:
if (x == 9) {
gotoAndPlay(15);
} else {
gotoAndPlay(16);
}
你也可以使用else if语句将if语句更推进一步,如下所示:
if (x == 9) {
gotoAndPlay(15);
} else if (x == 10) {
gotoAndPlay(16);
} else if (x == 11) {
gotoAndPlay(20);
} else {
gotoAndPlay(25);
}
你可以让if语句想要多长就有多长,你也可以使用else if语句对别的变量进行比较,如下所示:
if (x == 9) {
gotoAndPlay(15);
} else if (y<20) {
gotoAndPlay(16);
} else {
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 (var i = 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,结果为false,结束循环,开始执行for结构后面的代码。
2.其他形式的循环结构
for循环是最常用的一种循环结构,除for循环之外还有while循环和do…while循环。
while循环的例子如下所示:
i = 0;
while (i != 10) {
trace(i);
i++;
}
while循环看起来似乎要比for循环简单一些,从结构上看甚至与if语句还有一些相似。只要while后面括号中的条件成立,循环就会一直进行下去,所以在while循环体中需要有改变条件的语句,以使条件最终能够为false,完成循环,如上例中的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帧中。如果程序相当复杂,再放在同一帧中就使脚本显得太庞大了。
函数使你可以组织需重用的代码,并放在时间轴中,例如:
function myFunction(myNum) {
var newNum = myNum+5;
return newNum;
}
函数以关键字function开头,function后面是函数名。与变量名相似,你可以指定自己的函数名,最好将函数名取得有意义一些。
函数名后面的括号容纳该函数的参数,所谓参数也是一个变量,它的值在调用该函数时予以指定。一个函数可以有若干参数,也可以没有参数。无论有没有参数,函数名后都应紧跟一对括号。
大括号中的部分是函数体,在函数体中创建了一个局部变量newNum,将myNum加5的结果设置为newNum的值。如果你将10作为参数传递给该函数,newNum的值就是15。
return命令仅用于函数中,使用return结束一个函数并返回函数值。此处,newNum是用return命令返回的函数值。
要使用函数,就需要调用它,如下所示:
var a = 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中的var newNum = myNum+5改成var newNum = myNum+7,上面3个调用该函数的命令的结果将变成10、13和15
3.4.7 点语法
ActionScript中一个很重要的概念是点语法。点语法也是很多面向对象的编程语言中用来组织对象和函数的方法。
假设你想求一个数的绝对值,Flash中有一个内置的绝对值函数,它包含在ActionScript的“对象”/“核心”/“Math”/“方法”中。要使用绝对值函数,首先要使用对象名,即Math,然后是方法名abs,它们之间用符号“.”隔开,具体表示方法如下所示:
var a = Math.abs(-7);
点语法的另一个用途是指定影片剪辑的属性。如下面的语句将影片剪辑myMC的_alpha(透明度)属性设置为50%:
myMC._alpha = 50;
你还可以在影片剪辑中使用点语法定位根(root)中的一个全局变量。如果你在主时间轴中创建了一个全局变量globelVar,而要在影片剪辑中使用这个全局变量,可以使用如下的语句:
trace(_root.globleVar);
如果你现在对对象、影片剪辑属性、层级之类的概念还不熟悉,不用着急,在以后的内容中我们将对它们进行更深入的讲解。
3.4.8 注释
我们可以在Flash的动作面板中添加注释,注释就是程序中并不参与执行的那些代码。它可以用来提醒你某些代码的作用,方便你组织和编写脚本。一个注释的例子如下所示:
// 将影片剪辑myMC的透明度设置为50%
myMC._alpha = 50;
该例的第1行是注释,注释以双斜线//开头,在//后面你可以输入任意的文本和符号,Flash会自动将注释部分用灰色标示。
上例是将注释专门放在一行中,你也可以将注释放在一行代码的后面,如下所示:
myMC._alpha = 50; // 将影片剪辑myMC的透明度设置为50%
只要使用//符号,Flash就会忽略它后面的部分。
3.5 调试脚本
无论在编写程序时有多么细心,每个程序员都避免不了要调试程序。要学好ActionScript,你就得熟练掌握调试程序的方法。在Flash MX中调试程序有3种方法:逻辑推断、向输出窗口发送信息和使用脚本调试器。
3.5.1 逻辑推断
许多程序错误其实很简单,也很容易解决,并不需要专门的调试工具。当程序出现错误时,你应对错误出现在哪里有一个大致的把握。
就算你不知道问题出在哪里,但通过细心阅读代码,你也有可能找到它。你可以思考一下,你要实现的效果是什么?现在的效果与你的设想有多大差距?是什么原因造成了这种差距?修改哪些部分有望改正这种错误?经过反复思考、修改和调试,你对程序的理解就会不断加深,你的程序也会越来越趋于正确。
没有人比你更了解你自己的程序,所以对你来说,你编写的程序最先宜采用逻辑推断的方法进行调试。还有一些错误或漏洞隐藏得比较深,这就需要借助于调试工具。
3.5.2 输出窗口
输出窗口是一个简单而实用的调试工具,在程序中可以使用trace命令将特定的信息发送到输出窗口中,这些信息可以帮助你了解代码的运行情况。
前面我们已经介绍过输出窗口,这里就不再赘述了。
3.5.3 调试器
调试器是一个更专业的调试工具,它是Flash MX中的一个窗口,通过调试器可以查看影片中的各种数据以及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)启动Flash MX,在时间轴中插入两个空白关键帧,使时间轴包含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 (release) {
trace("You are cliking me!");
}
按钮的脚本有特殊的语法,即必须以关键字on开头,以on开头的代码是一种事件处理函数,即当特定事件发生时要执行的代码。在这里,特定事件就是release(松开鼠标),它是按钮最常用的事件。
按钮事件还有press、releaseOutside、rollOver、rollOut、dragOver、dragOut以及keyPress等。press是按下鼠标事件,它在release事件之前发生,releaseOutside是在按钮上按下鼠标,并且在按钮外松开鼠标的事件,rollOver是鼠标指针移到按钮所在热区的事件,rollOut是鼠标从按钮热区移出的事件,dragOver是在鼠标指针位于按钮上方并已按下按钮的情况下,滑出按钮再滑回按钮的事件,dragOut是当鼠标指针位于按钮内部,按下按钮然后滚动出按钮区域的事件,keyPress是按钮响应在键盘上按下某些键时的事件。
某种事件的发生,会触发相应事件处理函数开始运行,上例中使用trace语句将事件信息发送到输出窗口中,使你可以更好地了解具体按钮事件的含义。
4.3 练习:演示文档
用Flash可以实现演示文档的功能,演示文档相当于我们常说的幻灯片,它可以进行逐页展示。如果不使用脚本,Flash动画会很快地播放每一帧,要用Flash制作演示文档就得对Flash添加控制命令。
我们用脚本使每一帧停止,要跳转到别的帧,就需要使用按钮。
制作演示文档的操作步骤如下:
(1)启动Flash MX,编辑前5帧。
(2)在文档中创建5个按钮,从库面板中可以看到它们。
(3)打开主时间轴第1帧的动作面板,其中添加了如下语句:
stop();
影片播放时,会停止在第一帧上。
(4)为图层2的第1帧和第5帧分别添加帧标签begin和end,
(5)选中第1帧中的“开始”按钮,打开其动作面板,在其中添加如下语句:
on (release) {
nextFrame();
}
单击“开始”按钮,停止在第1帧的影片会跳转到第2帧并停止。
(6)分别在第2~4帧的相同位置添加按钮“首页”、“上一页”、“下一页”、“末页”。由于第5帧后面没有别的帧,所以只添加“上一页”和“首页”两个按钮。
(7)为所有“首页”按钮添加脚本:
on (release) {
gotoAndStop("begin");
}
单击“首页”按钮,影片将跳转到帧标签为begin的那一帧并停止,即第1帧。这里也可以用1替代"begin"。
(8)为所有“上一页”按钮添加脚本:
on (release) {
prevFrame();
}
单击“上一页”按钮,影片将从当前帧跳转到前一帧并停止。
(9)为所有“下一页”按钮添加脚本:
on (release) {
nextFrame();
}
单击“下一页”按钮,影片将从当前帧跳转到下一帧并停止。
(10)为所有“末页”按钮添加脚本:
on (release) {
gotoAndStop("end");
}
单击“末页”按钮,影片将从当前帧跳转到帧标签为en

FLASH语言AFLASH语言C

Write a comment

You must be logged in to write a comment. if you're not a registered member, please sign up.

October 2008
SMTWTFS
September 2008November 2008
1234
567891011
12131415161718
19202122232425
262728293031