第二章、图形动画制作用Flash制作动画,光凭时间轴和图层来制作画面,即使动画再精彩,也只能让观赏者盯着屏幕,沿着时间线的进度被动的欣赏。如果要想动画具有交互性,根据观赏者的选择来控制播放的顺序或者呈现不同的内容就必须依靠Flash的动作脚本语言了。动作脚本英文为ActionScript,简称AS。目前AS的最高版本是3.0。运用Flash动作脚本语言,能实现时间轴无能为力的一些特殊效果;运用基本技法与动作脚本语言相结合制作出来的动画效果,往往更加精彩;运用动作脚本语言,还可以让一些复杂繁琐的制作过程得到有效的简化。要学好Flash动画,学习和掌握动作脚本语句是非常重要的。然而,一提起编程语言,难免让人联想到一行行枯燥乏味的代码,一段段高深莫测的理论,往往使初学者对“AS”望而却步。事实上,Flash动作脚本语言并非想象的那么难,我们将不安排专门的章节讲解枯燥的理论和代码规范,采取从最常用的简单语句入手,用具体的实例来解读语句。一、认识动作面板在Flash中,动作脚本的编写,都是在“动作”面板的编辑环境中进行的,因此熟悉“动作”面板是十分必要的。按【F9】键调出“动作”面板,可以看到“动作”面板的编辑环境由左右两部分组成。左侧部分又分为上下两个窗口。如下图所示。左侧的上方是一个“动作”工具箱,单击前面的图标展开每一个条目,可以显示出对应条目下的动作脚本语句元素,双击选中的语句即可将其添加到编辑窗口。下方是一个“脚本”导航器。里面列出了FLA文件中具有关联动作脚本的帧位置和对象;单击脚本导航器中的某一项目,与该项目相关联的脚本则会出现在“脚本”窗口中,并且场景上的播放头也将移到时间轴上的对应位置上。双击脚本导航器中的某一项,则该脚本会被固定。右侧部分是“脚本”编辑窗口,这是添加代码的区域。可以直接在“脚本”窗口中编辑动作、输入动作参数或删除动作。也可以双击“动作”工具箱中的某一项或“脚本编辑”窗口上方的【添加脚本】工具,向“脚本”窗口添加动作。二、为“关键帧”添加动作在Flash中添加动作脚本可以分为两种方式,一是为“帧”添加动作脚本,二是向“对象”添加动作脚本。“帧”动作脚本,是指在时间轴的“关键帧”上添加的动作脚本。“对象”动作脚本,是指在“按钮”元件和“影片剪辑”元件的实例上添加的动作脚本。请注意,“图形”元件上是不能添加动作脚本的。我们来看看关键帧上添加stop();、gotoAndstop()动作,来控制影片的播放。stop()的作用是停止动画播放。gotoAndstop()的作用是通知播放头跳转到某一帧并在该帧停止。请看实例2-1。这里我们用添加帧动作实现了让动画按要求停止播放,但是,一旦停止了下来就无法再自动重新播放,此时单击动画右下角的play按钮,就可以使动画继续播放了,这就是动画中简单的交互。上例涉及的语法及规范:小括号“()”:在“AS”中,这个小括号“()”的作用之一是用来在其中定义函数或者动作的参数,如本节实例中用到的gotoAndStop(50),也有不用参数的动作,如本节用到的stop()。分号“;”:在“AS”中,分号“;”是用来作为语句结束的标记,在FlashAS脚本中,任何一条语句都是以“;”号结束的。虽然有时省略了“;”号,Flash也可以成功的编译这个脚本,但这是不规范的。帧动作标志“a”:当关键帧上添加了动作脚本之后,该帧上就会出现一个小写的字母“a”,如上例中时间轴上的第1帧、第10帧、第20帧,这个标志表明在该帧上添加了动作。课后练习:运用这一节的知识,并利用上面2-1例子的源文件做一个简单的课后练习,要求是:动画开始播放后,小松鼠跑到第10帧然后直接跳到第30帧,到第40帧后又直接跳到第60帧。效果如“练习2-1”。三、为“影片剪辑”添加动作前面,我们学习了在关键帧上添加动作以控制影片的播放,这一节将用上一节学习过的语句,在影片剪辑上添加动作来控制主场景时间轴以及影片剪辑自身的播放。请看实例2-2。画面上,还是这只可爱的小松鼠在不知疲倦的来回奔跑,背景是我们已经熟悉的动作面板,左下角显示了当前选择的对象是名称为“松鼠”的影片剪辑,这表明【代码编辑】窗口中显示的语句是直接添加在“松鼠”影片剪辑上的,注意,这个名称不是在“属性”面板中为对象指定的实例名,而是库中影片剪辑的名称。动作很简单,而且都是添加在位于主场景上的对象上,其区别除了语句所添加的对象不同以外,路径的指向也有所区别(需要理解的知识点)。我们来分析这一句:on(release){play();}这个语句没有指明路径,当添加在按钮上时,它控制的是包含有按钮对象的当前时间轴,即按钮的父时间轴;当添加在影片剪辑对象上时,它控制的是影片剪辑对象自身的时间轴,由于控制自身时间轴不需要指明路径,因此也不必在“属性”面板中命名。如果要在影片剪辑上添加控制当前场景的动作,则需要指明路径,如:on(rollOut){_root.play();}如果要在按钮上添加控制位于同一场景的影片剪辑,则需要在属性面板中为影片剪辑命名,并指明路径,如:on(release){_root.shu_mc.stop();}路径概念非常重要,在编写动作脚本时,如果路径的指向不正确,就实现不了预期的效果。为影片剪辑添加动作的方法是,选中场景上要为其添加动作的影片剪辑,这时“动作”面板标题栏上显示的标题是“动作-影片剪辑”,这表明当前要为其添加脚本的对象是影片剪辑,然后在脚本编辑窗口中添加动作。为语句添加注释:为语句添加注释也是增加代码可读性的一个好习惯,这样不仅有利于别人解读代码,也有利于自己对代码进行分析和记忆。注释的格式是用双斜线“//”开头,后面书写文字,可以放在语句的后面、上面或者下面。如上例所示。课后练习:利用提供的课后练习源文件,大家可以尝试在“控制”按钮、“小松鼠”影片剪辑和“小球”影片剪辑上分别添加语句完成以下效果:1.当鼠标在“控制”按钮、“小松鼠”影片剪辑或者“小球”影片剪辑上滑过时,小松鼠和小球分别停止在场景的左右两端;2.当在“控制”按钮、“小松鼠”影片剪辑或者“小球”影片剪辑上按下鼠标时,小松鼠和小球分别按照相反的方向运动;3.当在“控制”按钮、“小松鼠”影片剪辑或者“小球”影片剪辑上点击(按下并释放)鼠标时,小松鼠踏在小球上从场景左端开始来回运动。也就是说,要求在按钮、小松鼠和小球影片剪辑上分别添加语句来实现相同的控制效果。四、为“按钮”添加动作为按钮添加鼠标事件来控制动画的播放状态和控制影片剪辑的播放,实现简单的交互。要学习的语句是on()事件处理函数;指定触发动作的鼠标事件。语法格式:on(mouseEvent){}“()”小括号中的mouseEvent参数是鼠标事件,常用的有以下几种鼠标事件:Press当鼠标指针经过按钮时按下鼠标。release当鼠标指针经过按钮时按下再释放鼠标按钮。releaseOutside当鼠标指针在按钮之内时按下按钮后,将鼠标指针移到按钮之外,此时释放鼠标按钮。rollOut鼠标指针滑出按钮区域。rollOver鼠标指针滑过按钮。请看实例2-3。画面上方,仍然是那只欢跳的小松鼠在画面上不停的来回奔跑。来回奔跑的动作是在主场景时间线上设置的动作。画面下方,显示有我们熟悉的“属性”面板,从这里可以看到,画面上这只跳跃的小松鼠是一个名称为“松鼠”的影片剪辑元件,我们给这只小松鼠定义了一个实例名为“shu_mc”。要用动作控制影片剪辑的播放状态,为对象命名是必须的一个步骤。画面中间有3组按钮,当鼠标滑过按钮时,将显示该按钮上添加的动作,请大家先注意看看三组按钮上的语句,再分别点击各个按钮,试试它们有什么不同的作用。点击蓝色按钮,可以控制场景的播放与停止,但是不能控制影片剪辑“shu_mc”的播放与停止;点击绿色按钮,可以控制影片剪辑“shu_mc”的播放与停止,但是不能控制场景的播放与停止;点击红色按钮,可以同时控制影片剪辑“shu_mc”和场景的播放与停止。看一下前两组按钮上的语句,以“stop”按钮为例。其差别是,绿色“stop”按钮上的动作前面添加了“_root.shu_mc”:on(release){_root.shu_mc.stop();}为按钮添加动作的方法是,选中场景上要为其添加动作的按钮,这时“动作”面板标题栏上显示的标题是“动作-按钮”,这表明当前要为其添加脚本的对象是按钮。在脚本编辑窗口中添加动作。涉及的语法及规范:这个语句里面的大括号“{}”以及路径“_root”和点语法。大括号“{}”:用来放置结合在一起依次执行的语句块,这里是当发生“release”鼠标(点击并释放)事件时执行令当前场景上的影片剪辑“shu_mc”停止播放的动作。在红色按钮中,则把停止场景播放的“stop()”语句和停止影片剪辑播放的“_root.shu_mc.stop()”语句结合在一起实现同时控制两者播放状态的作用。绝对路径:Flash中目标路径有两种,绝对路径和相对路径,我们今天接触的“_root.shu_mc.stop()”是绝对路径,指定了发生stop动作的绝对地址和对象,这个绝对地址就是当前场景_root,对象就是影片剪辑“shu_mc”,即让当前场景“_root”上的实例名为“shu_mc”的影片剪辑对象“stop”停止播放。如果我们要执行动作的对象“shu_mc”影片剪辑,没有直接位于主场景上,而是嵌套在另外一个位于主场景的影片剪辑“a”中,甚至是嵌套在更深的级别中呢,那就得一级级指明路径,程序指令才能正确的执行。点语法“.”:是基于“面向对象”的语法形式,就是利用目标对象本身去管理自己,用“.”语法通知目标对象执行什么指令是非常简洁的语法形式。比如此处,就用了“.”语法通知“_root”上的“shu_mc”“stop”停止播放。对象的后缀:在Flash中有各种对象,如按钮、影片剪辑、文本、图形、声音对象等等,在动作脚本中,有对应这些对象的特定后缀,每一种后缀代表一种特定的对象,比如影片剪辑的后缀为“_mc”,文本对象的后缀为“_txt”,在为对象命名时有必要正确的添加后缀,如上面的“shu_mc”,这样不仅使语句更符合规范,在别人解读代码时方便的知道对象的类型,也能够让Flash识别对象的类型,在添加语句时才能有效使用代码提示功能。五、实例制作