820 likes | 988 Views
Flahs 动画制作. 第六章 动作脚本入门. 主讲:王玉姝. 第一节 【 动作 】 面板的使用方法. 1 、 【 动作 】 面板的组成. 动作工具箱. 脚本输入区. 脚本导航器. “ 脚本窗口”上方还有若干功能按钮,利用它们可以快速对动作脚本实施一些操作,. 显示代码提示. 脚本参考. 自动套用格式. 查找. 调试选项. 语法检查. 替换. 视图选项. 插入目标路径. 将新项目添加到脚本中. 2 .管理影片文件中的动作脚本. ( 1 )添加动作脚本
E N D
Flahs动画制作 第六章 动作脚本入门 主讲:王玉姝
第一节 【动作】面板的使用方法 1、【动作】面板的组成 动作工具箱 脚本输入区 脚本导航器
“脚本窗口”上方还有若干功能按钮,利用它们可以快速对动作脚本实施一些操作,“脚本窗口”上方还有若干功能按钮,利用它们可以快速对动作脚本实施一些操作, 显示代码提示 脚本参考 自动套用格式 查找 调试选项 语法检查 替换 视图选项 插入目标路径 将新项目添加到脚本中
2.管理影片文件中的动作脚本 (1)添加动作脚本 可以直接在【脚本窗口】中编辑动作、输入动作参数或删除动作。还可以双击“动作工具箱”中的某一项或“脚本窗口”上方的【将新项目添加到脚本中】按钮 ,向【脚本窗口】添加动作。
定义一个按钮的动作脚本 • 按钮用来控制影片播放,先选中这个按,切换到【动作】面板,在“动作工具箱”中展开【全局函数】,选择【影片剪辑控制】类别,双击该类别下的【on】动作, “脚本窗口”中就自动出现相应的on动作脚本,并且屏幕上同时还弹出了关于on动作的参数设置菜单, • 双击参数提示菜单中的某一个参数,比如press,接着输入大括弧”{“,然后再切换到“动作工具箱”,展开【全局函数】中的【时间轴控制】类别,双击这个类别下面的【play】动作,这时,在“脚本窗口”中会出现一个新的命令,再输入一个大括弧”}”,最后单击“脚本窗口”上方的【自动套用格式】按钮 ,将“脚本窗口”中的脚本变得更清楚一些,最后完成的动作脚本
(2)固定动作脚本 • 双击“脚本导航器”中的某一项,则该脚本会被固定,被固定的脚本会在“脚本窗口”的下方显示一个标签。如图所示,在“脚本窗口”下方显示了3个标签,说明有3个脚本被固定。
(3)关于代码提示 • 在【动作】面板中编辑动作脚本时,Flash 可以检测到正在输入的动作并显示代码提示,即包含该动作完整语法的工具提示,或列出可能的方法或属性名称的弹出菜单。当精确输入或命名对象时,会出现参数、属性和事件的代码提示, • 例如,假设您输入以下代码: var names:Array = new Array(); names. • 当你输入句点“.”时,Flash 就会显示可用于 Array 对象的方法和属性的列表,因为你已经将该变量的类型指定为数组,
(4)检查语法和标点 在【动作】面板中,有3种方法检查语法: • 单击“脚本窗口”上方的【语法检查】按钮 • 在【动作】面板中,单击右上角的按钮 ,在弹出的菜单中选择【语法检查】命令。 • 在【动作】面板中,按快捷键Ctrl+T。
第二节 变量、函数与语法规范 学习ActionScript编程的基础知识,学习ActionScript程序的一些基本结构 ActionScript程序其实就是由一些命令、数字和一些符号组成
我们一起来看一段定义在一个按钮上的小程序:我们一起来看一段定义在一个按钮上的小程序: on (release) { var myNumber = 7; var myString = "Flash MX 2004 ActionScript"; for (var i = 0; i<myNumber; i++) { trace(i); if (i+3 == 8) { trace(myString); } } }
基本的概念 1.常量 • 常量就是一种属性,是指在程序运行中不会改变的量。例如上面程序代码中的数值3、7、8和字符串“Flash MX 2004 ActionScript”都是常量。 • 逻辑常量True和False在编程的时候也会经常用到。
2.变量 • Variables(变量):存储了任意数据类型值的标识符 1)变量命名与规则 • 变量的名称必须以英文字母开头。 • 变量的名称中间不能有空格,想用两个单词以上的单字来命名变量,可以在名称中间加上下划线符号,如:box_sum。 • 变量的名称中不能使用除了“_”(下划线)以外的符号。 • 不能使用与命令(关键字)相同的名称,例如,“var”、“new”等,以免程序出现错误。 • 变量的名称最好能达到“见名知意”的效果,尽量使用有意义的名称,而避免使用诸如a_1、x、z001之类意义不明的名称。
2)变量的类型 • 变量的类型包括存储数值、字符串或其他数据类型。 (3)变量的作用域 所谓变量的作用域,是指能够识别和引用该变量的区域。也就是变量在什么范围内是可以访问的。在ActionScript中有3种类型的变量区域: • 本地(局部)变量:在自身代码块中有效的变量(在大括号内)。就是在声明它的语句块内(例如一个函数体)是可访问的变量,通常是为避免冲突和节省内存占用而使用。
时间轴变量:可以在使用目标路径指定的任何时间轴内有效。时间线范围变量声明后,在声明它的整个层级(Level)的时间线内它是可访问的。时间轴变量:可以在使用目标路径指定的任何时间轴内有效。时间线范围变量声明后,在声明它的整个层级(Level)的时间线内它是可访问的。 • 全局变量:即使没有使用目标路径指定,也可以在任何时间轴内有效。就是在整个 Movie 中都可以访问的变量 • 注意它们的区别:全局变量可以在整个Movie中共享;局部变量只在它所在的代码块(大括号之间)中有效。
(4)声明和使用变量 使用变量前,最好使用var命令先加以声明。在声明变量的时候,一般要注意以下内容: • 要声明常规变量,可使用Set Varible动作或赋值运算符(=),这两种方法获得的结果是一样的。 • 要声明本地变量,可以在函数主体内使用var语句。
要声明全局变量,可以在变量名前面使用_global标识符。要声明全局变量,可以在变量名前面使用_global标识符。 例如:_global. myName = "Global"; • 要测试变量的值,可以使用trace动作将变量的值发送到输出窗口。 例如: trace(i) trace(myString) 就可以将变量i的值发送到测试模式的输出窗口中。也可以在测试模式的调试器中检查和设置变量值。
3.函数 (1) 系统函数 • 谓系统函数,就是Flash内置的函数,用户在编写程序的时候可以直接拿来使用。下面是一些常用的系统函数。 • Boolean:转换函数,将参数转换为布尔类型。 • GetVersion:函数获取Flash play的版本号。 • ParseInt:数学函数,将字符串分析为整数。(详见书上)
(2)自定义函数 除了系统函数,我们在编写程序时还需要自己定义一些函数,用这些函数去完成指定的功能。在Flash中定义函数的一般形式为: function 函数名称(参数1,参数2,……,参数n){ //函数体。即函数的程序代码 }
4.语法规范 (1)关键字 • 关键字是ActionScript程序的基本构造单位,它是程序语言的保留字(Reserved Words),不能被作为其它用途(不能作为自定义的变量,函数,对象名)。 • ActionScript中的关键字不是很多,见书上表6-2-1所示。
2)运算符 • 运算符指定如何合并、比较或修改表达式中值的字符。也就是说通过运算来改变变量的值。 • 运算符所操作的元素被称为运算项。例如,在以下语句中,加号(+)就是运算符,i和3就是运算项:i + 3
运算符包括: • 算术运算符:+(加)、*(乘)、/(除)、%(求余数)、-(减)、++(递增)、--(递减)。 • 比较运算符:<(小于)、>(大于)、<=(小于或等于)、>=(大于或等于)。 (3)逻辑运算符:&& (逻辑“和”)、|| (逻辑“或”)、! (逻辑“非”)。 • 见书上表6-2-2所示是运算符优先级的列表。运算符的优先级,即几个运算符出现在同一表达式中时先运算哪一个,从上到下递减。
3)表达式 • 在ActionScript中最常见的语句就是表达式,它通常由变量名、运算符及常量组成。下面是一个简单的表达式:x = 0; • 左边是变量名(x),中间是运算符(赋值运算符 “=”),右边是常量(数值 0)。由这个表达式我们可以声明(Declare)一个变量,为下一步操作做准备。 • 算术表达式 用算术运算符(加、减、乘、除)做数学运算的表达式。例如: 2*3*4;
字符表达式 • 用字符串组成的表达式。 • 例如:用加号运算符“+”在处理字符运算时有特殊效果。它可以将两个字符串连在一起。 • “恭喜过关,”+“Donna!” • 得到的结果是“恭喜过关,Donna!”。如果相加的项目中只有一个是字符串则FIash会将另外一个项目也转换为字符串。
逻辑表达式 • 逻辑运算符就是做逻辑运算的表达式。例如:1>3,返回值为false,即1大于3为假。逻辑运算符通常用于if动作的条件判断,确定条件是否成立。 例如: if (x == 9) { gotoAndPlay(15); } • 这段代码的功能是,当x与9比较结果为true时就跳转到15帧并开始播放。
(4)代码书写格式 • ActionScript 的每行语句都以分号“;”结束。长语句允许分多行书写,即允许将一条很长语句分割成两个或更多代码行,只要在结尾有个分号就行了。 • 字符串不能跨行,即两个分号必须在同一行。 • 双斜杠后面是注释,在程序中不参与执行,用于增加程序的可读性。 • ActionScript是区分大小写字母的。
单球鼠标跟随 • 在[跟随]元件中的第一帧: A=12; this._x=this._x+_xmouse/A; this._y=this._y+_ymouse/A;
多球鼠标跟随 • 第一帧: copies=5; for(var i=1;i<=copies;i++){ duplicateMovieClip("drag0","drag"+i,i); eval ("drag"+i).num=i; }
场景中拖入[影片剪辑]物体代码: onClipEvent(enterFrame){ if (num){ xTarget=eval("_root.drag"+(num-1))._x; yTarget=eval("_root.drag"+(num-1))._y; }else{ xTarget=_root._xmouse; yTarget=_root._ymouse; } fraction=0.5; _x+=(xTarget-_x)*fraction; _y+=(yTarget-_y)*fraction; }
水波鼠标跟随 • 建立两个图层,动画层和AS层 • 动画层拖入影片剪辑 • AS层输入代码段: • 第一帧: movie._visible = 0; • 第二帧:见后面 • 第三帧:gotoAndPlay(2);
第二帧 i++; if (i>100) { i = 1; } movie._x += (_xmouse-movie._x)/30; movie._y += (_ymouse-movie._y)/30; duplicateMovieClip(movie, "movie"+i, i); this["movie"+i]._x = movie._x; this["movie"+i]._y = movie._y;
第三节 事件和事件处理函数 1.事件分类及处理事件的方法 Flash中的事件包括用户事件和系统事件两类。 • 用户事件是指用户直接交互操作而产生的事件。例如鼠标单击或按下键盘键之类的事件。 • 系统事件是指Flash Player自动生成的事件,它不是由用户直接生成的。例如影片剪辑在舞台上第一次出现或播放头经过某个关键帧。
一般情况下,在以下几种情况下会产生事件: • 当在时间轴上播放到某一帧时。 • 当某个影片剪辑载入或卸载时。 • 当单击某个按钮或按下键盘上的某个键时。 Flash MX 2004提供了三种编写事件处理程序的方法: • 针对对象的on()事件处理函数 • 事件处理函数方法 • 事件侦听器
2.针对按钮对象的on()事件处理函数 on()事件处理函数是最传统的事件处理方法。它直接作用于按钮元件实例,程序代码要编写到按钮实例的动作脚本中。on()函数的一般形式为: on(鼠标事件){ //此处是语句,语句响应鼠标事件 } 鼠标事件是“事件”触发器,事件发生时,执行大括号中的语句。比如press是在鼠标指针经过按钮时按下鼠标按钮时产生的事件。
定义按钮的动作脚本 选择舞台上的第1个按钮,打开【动作】面板,在其中输入“on(”,这时弹出一个鼠标事件下拉列表,从其中双击【press】,然后输入:){play();} 第一个按钮的完整的动作脚本是: on(press){ play(); } • 这个动作脚本的功能是,当用鼠标单击这个按钮时,舞台上的动画开始播放。
第2个按钮的动作脚本和第1个的定义过程类似,先选择第2个按钮,在【动作】面板中按照前面的方法定义这个按钮的动作脚本:第2个按钮的动作脚本和第1个的定义过程类似,先选择第2个按钮,在【动作】面板中按照前面的方法定义这个按钮的动作脚本: on(press){ stop(); } 这个动作脚本的功能是,当用鼠标单击这个按钮时,舞台上的动画停止播放。
3.事件处理函数方法 • 事件处理函数方法是一种类方法,事件在该类的实例上发生时产生调用。例如,Button(按钮)类定义onPress事件处理函数,只要按下鼠标就对Button对象调用该处理函数。Flash Player在相应事件发生时自动调用事件处理函数。 • 要让应用程序响应该事件,需要使用 function语句定义一个函数,然后将该函数分配给相应的事件处理函数。
事件处理函数由三部分组成:事件所应用的对象、对象的事件处理函数方法的名称和分配给事件处理函数的函数。事件处理函数的基本结构为: 对象.事件处理函数方法名称= function () { // 你编写的程序代码,对事件作出反应 } (1)定义按钮实例名称 按照前面的方法,并且引用两个按钮元件实例。分别单击两个按钮实例,在【属性】面板中分别定义它们实例名称为:play_btn和stop_btn。
(2)定义事件处理函数 • 新建一个图层,并将它重新命名为“action”。选择这个图层的第1帧,在【动作】面板中定义这个帧的动作脚本为: play_btn.onPress=function(){ play(); } stop_btn.onPress=function(){ stop(); }
4.事件侦听器 • 事件侦听器让一个对象(称作侦听器对象)接收由其他对象(称作广播器对象)生成的事件。广播器对象注册侦听器对象以接收由该广播器生成的事件。例如,你可以注册按钮实例可以从文本字段对象接收onChanged通知。 • 说明:可以注册多个侦听器对象以从一个广播器接收事件,也可以注册一个侦听器对象以从多个广播器接收事件。
事件侦听器的事件模型类似于事件处理函数方法的事件模型,但有两个主要差别:事件侦听器的事件模型类似于事件处理函数方法的事件模型,但有两个主要差别: • 向其分配事件处理函数的对象不是发出该事件的对象。 • 调用广播器对象的特殊方法addListener(),该方法将注册侦听器对象以接收其事件。 • 要使用事件侦听器,需要用具有该广播器对象生成的事件名称的属性创建侦听器对象。然后,将一个函数分配给该事件侦听器(以某种方式响应该事件)。最后,你在正广播该事件的对象上调用addListener(),向它传递侦听器对象的名称。
事件侦听器模型的一般形式为: listenerObject.eventName= function(参数){//定义侦听器对象事件函数 // 此处是你的代码 }; broadcastObject.addListener(listenerObject); 其中listenerObject是指定侦听器对象的名称,可以是任何对象;broadCastObject是名称,eventName是事件名称。事件名称是在广播器对象(broadCastObject)上发生的事件,然后将该事件广播到侦听器对象(listenerObject),侦听器对象的事件函数对事件作出反应。
5.按钮事件和MC事件 on()处理函数处理按钮事件,而onClipEvent()处理函数处理影片剪辑事件。两种处理函数事件类似 完整地列举一下on()和onClipEvent()事件处理函数所支持的事件。
(1)on()事件处理函数所支持的事件 • press:事件发生于鼠标在按钮上方,并按下鼠标时。 • release:事件发生于在按钮上方按下鼠标,接着松开鼠标时。也就是“按一下”鼠标 • releaseOutside:事件发生于在按钮上方按下鼠标,接着把鼠标移到按钮之外,然后松开鼠标时。 • rollOver:事件发生于鼠标滑入按钮时。
rollOut:事件发生于鼠标滑出按钮时。 • dragOver:事件发生于按着鼠标不松手,鼠标滑入按钮时。 • dragOut:事件发生于按着鼠标不松手,鼠标滑出按钮时。 • keyPress:事件发生于用户按下指定的按键时。
(2)onClipEvent()事件处理函数所支持的事件 onClipEvent()事件处理函数使用的一般形式为: onClipEvent(movieEvent){ // 此处是你的语句,用来响应事件。 } • 其中movieEvent是一个事件“触发器”。当事件发生时,执行该事件后面大括号中的语句。
对于影片剪辑而言,可指定的触发事件有9种 • load:影片剪辑一旦被实例化并出现在时间轴中时,即启动此动作。 • unload:在时间轴中删除影片剪辑之后,此动作在第1帧中启动。在向受影响的帧附加任何动作之前,先处理与Unload影片剪辑事件关联的动作。 • enterFrame:以影片剪辑帧频不断触发的动作。首先处理与enterFrame剪辑事件关联的动作,然后才处理附加到受影响帧的所有帧动作。
mouseMove:每次移动鼠标时启动此动作。_xmouse和_ymouse属性用于确定当前鼠标位置。mouseMove:每次移动鼠标时启动此动作。_xmouse和_ymouse属性用于确定当前鼠标位置。 • mouseDown:当按下鼠标左键时启动此动作。 • mouseUp:当释放鼠标左键时启动此动作。 • keyDown:当按下某个键时启动此动作。 • keyUp:当释放某个键时启动此动作。
data:当在loadVariables()或loadMovie()动作中接收数据时启动此动作。当与loadVariables()动作一起指定时,data事件只在加载最后一个变量时发生一次。当与loadMovie()动作一起指定时,获取数据的每一部分时,data事件都重复发生。data:当在loadVariables()或loadMovie()动作中接收数据时启动此动作。当与loadVariables()动作一起指定时,data事件只在加载最后一个变量时发生一次。当与loadMovie()动作一起指定时,获取数据的每一部分时,data事件都重复发生。