1 / 82

第六章 动作脚本入门

Flahs 动画制作. 第六章 动作脚本入门. 主讲:王玉姝. 第一节 【 动作 】 面板的使用方法. 1 、 【 动作 】 面板的组成. 动作工具箱. 脚本输入区. 脚本导航器. “ 脚本窗口”上方还有若干功能按钮,利用它们可以快速对动作脚本实施一些操作,. 显示代码提示. 脚本参考. 自动套用格式. 查找. 调试选项. 语法检查. 替换. 视图选项. 插入目标路径. 将新项目添加到脚本中. 2 .管理影片文件中的动作脚本. ( 1 )添加动作脚本

dagan
Download Presentation

第六章 动作脚本入门

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Flahs动画制作 第六章 动作脚本入门 主讲:王玉姝

  2. 第一节 【动作】面板的使用方法 1、【动作】面板的组成 动作工具箱 脚本输入区 脚本导航器

  3. “脚本窗口”上方还有若干功能按钮,利用它们可以快速对动作脚本实施一些操作,“脚本窗口”上方还有若干功能按钮,利用它们可以快速对动作脚本实施一些操作, 显示代码提示 脚本参考 自动套用格式 查找 调试选项 语法检查 替换 视图选项 插入目标路径 将新项目添加到脚本中

  4. 2.管理影片文件中的动作脚本 (1)添加动作脚本 可以直接在【脚本窗口】中编辑动作、输入动作参数或删除动作。还可以双击“动作工具箱”中的某一项或“脚本窗口”上方的【将新项目添加到脚本中】按钮 ,向【脚本窗口】添加动作。

  5. 定义一个按钮的动作脚本 • 按钮用来控制影片播放,先选中这个按,切换到【动作】面板,在“动作工具箱”中展开【全局函数】,选择【影片剪辑控制】类别,双击该类别下的【on】动作, “脚本窗口”中就自动出现相应的on动作脚本,并且屏幕上同时还弹出了关于on动作的参数设置菜单, • 双击参数提示菜单中的某一个参数,比如press,接着输入大括弧”{“,然后再切换到“动作工具箱”,展开【全局函数】中的【时间轴控制】类别,双击这个类别下面的【play】动作,这时,在“脚本窗口”中会出现一个新的命令,再输入一个大括弧”}”,最后单击“脚本窗口”上方的【自动套用格式】按钮 ,将“脚本窗口”中的脚本变得更清楚一些,最后完成的动作脚本

  6. (2)固定动作脚本 • 双击“脚本导航器”中的某一项,则该脚本会被固定,被固定的脚本会在“脚本窗口”的下方显示一个标签。如图所示,在“脚本窗口”下方显示了3个标签,说明有3个脚本被固定。

  7. (3)关于代码提示 • 在【动作】面板中编辑动作脚本时,Flash 可以检测到正在输入的动作并显示代码提示,即包含该动作完整语法的工具提示,或列出可能的方法或属性名称的弹出菜单。当精确输入或命名对象时,会出现参数、属性和事件的代码提示, • 例如,假设您输入以下代码: var names:Array = new Array(); names. • 当你输入句点“.”时,Flash 就会显示可用于 Array 对象的方法和属性的列表,因为你已经将该变量的类型指定为数组,

  8. (4)检查语法和标点 在【动作】面板中,有3种方法检查语法: • 单击“脚本窗口”上方的【语法检查】按钮 • 在【动作】面板中,单击右上角的按钮 ,在弹出的菜单中选择【语法检查】命令。 • 在【动作】面板中,按快捷键Ctrl+T。

  9. 第二节 变量、函数与语法规范 学习ActionScript编程的基础知识,学习ActionScript程序的一些基本结构 ActionScript程序其实就是由一些命令、数字和一些符号组成

  10. 我们一起来看一段定义在一个按钮上的小程序:我们一起来看一段定义在一个按钮上的小程序: 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);         }     } }

  11. 基本的概念 1.常量 • 常量就是一种属性,是指在程序运行中不会改变的量。例如上面程序代码中的数值3、7、8和字符串“Flash MX 2004 ActionScript”都是常量。 • 逻辑常量True和False在编程的时候也会经常用到。

  12. 2.变量 • Variables(变量):存储了任意数据类型值的标识符 1)变量命名与规则 • 变量的名称必须以英文字母开头。 • 变量的名称中间不能有空格,想用两个单词以上的单字来命名变量,可以在名称中间加上下划线符号,如:box_sum。 • 变量的名称中不能使用除了“_”(下划线)以外的符号。 • 不能使用与命令(关键字)相同的名称,例如,“var”、“new”等,以免程序出现错误。 • 变量的名称最好能达到“见名知意”的效果,尽量使用有意义的名称,而避免使用诸如a_1、x、z001之类意义不明的名称。

  13. 2)变量的类型 • 变量的类型包括存储数值、字符串或其他数据类型。 (3)变量的作用域 所谓变量的作用域,是指能够识别和引用该变量的区域。也就是变量在什么范围内是可以访问的。在ActionScript中有3种类型的变量区域: • 本地(局部)变量:在自身代码块中有效的变量(在大括号内)。就是在声明它的语句块内(例如一个函数体)是可访问的变量,通常是为避免冲突和节省内存占用而使用。

  14. 时间轴变量:可以在使用目标路径指定的任何时间轴内有效。时间线范围变量声明后,在声明它的整个层级(Level)的时间线内它是可访问的。时间轴变量:可以在使用目标路径指定的任何时间轴内有效。时间线范围变量声明后,在声明它的整个层级(Level)的时间线内它是可访问的。 • 全局变量:即使没有使用目标路径指定,也可以在任何时间轴内有效。就是在整个 Movie 中都可以访问的变量 • 注意它们的区别:全局变量可以在整个Movie中共享;局部变量只在它所在的代码块(大括号之间)中有效。

  15. (4)声明和使用变量 使用变量前,最好使用var命令先加以声明。在声明变量的时候,一般要注意以下内容: • 要声明常规变量,可使用Set Varible动作或赋值运算符(=),这两种方法获得的结果是一样的。 •   要声明本地变量,可以在函数主体内使用var语句。

  16. 要声明全局变量,可以在变量名前面使用_global标识符。要声明全局变量,可以在变量名前面使用_global标识符。 例如:_global. myName = "Global"; • 要测试变量的值,可以使用trace动作将变量的值发送到输出窗口。 例如: trace(i) trace(myString) 就可以将变量i的值发送到测试模式的输出窗口中。也可以在测试模式的调试器中检查和设置变量值。

  17. 3.函数 (1) 系统函数 • 谓系统函数,就是Flash内置的函数,用户在编写程序的时候可以直接拿来使用。下面是一些常用的系统函数。 • Boolean:转换函数,将参数转换为布尔类型。 • GetVersion:函数获取Flash play的版本号。 • ParseInt:数学函数,将字符串分析为整数。(详见书上)

  18. (2)自定义函数 除了系统函数,我们在编写程序时还需要自己定义一些函数,用这些函数去完成指定的功能。在Flash中定义函数的一般形式为: function 函数名称(参数1,参数2,……,参数n){         //函数体。即函数的程序代码 }

  19. 4.语法规范 (1)关键字 • 关键字是ActionScript程序的基本构造单位,它是程序语言的保留字(Reserved Words),不能被作为其它用途(不能作为自定义的变量,函数,对象名)。 • ActionScript中的关键字不是很多,见书上表6-2-1所示。

  20. 2)运算符 • 运算符指定如何合并、比较或修改表达式中值的字符。也就是说通过运算来改变变量的值。 • 运算符所操作的元素被称为运算项。例如,在以下语句中,加号(+)就是运算符,i和3就是运算项:i + 3

  21. 运算符包括: • 算术运算符:+(加)、*(乘)、/(除)、%(求余数)、-(减)、++(递增)、--(递减)。 • 比较运算符:<(小于)、>(大于)、<=(小于或等于)、>=(大于或等于)。 (3)逻辑运算符:&& (逻辑“和”)、|| (逻辑“或”)、! (逻辑“非”)。 • 见书上表6-2-2所示是运算符优先级的列表。运算符的优先级,即几个运算符出现在同一表达式中时先运算哪一个,从上到下递减。

  22. 3)表达式 • 在ActionScript中最常见的语句就是表达式,它通常由变量名、运算符及常量组成。下面是一个简单的表达式:x = 0; • 左边是变量名(x),中间是运算符(赋值运算符 “=”),右边是常量(数值 0)。由这个表达式我们可以声明(Declare)一个变量,为下一步操作做准备。 • 算术表达式 用算术运算符(加、减、乘、除)做数学运算的表达式。例如: 2*3*4;

  23. 字符表达式 • 用字符串组成的表达式。 • 例如:用加号运算符“+”在处理字符运算时有特殊效果。它可以将两个字符串连在一起。 • “恭喜过关,”+“Donna!” • 得到的结果是“恭喜过关,Donna!”。如果相加的项目中只有一个是字符串则FIash会将另外一个项目也转换为字符串。

  24. 逻辑表达式 • 逻辑运算符就是做逻辑运算的表达式。例如:1>3,返回值为false,即1大于3为假。逻辑运算符通常用于if动作的条件判断,确定条件是否成立。 例如: if (x == 9) {        gotoAndPlay(15); } • 这段代码的功能是,当x与9比较结果为true时就跳转到15帧并开始播放。

  25. (4)代码书写格式 • ActionScript 的每行语句都以分号“;”结束。长语句允许分多行书写,即允许将一条很长语句分割成两个或更多代码行,只要在结尾有个分号就行了。 • 字符串不能跨行,即两个分号必须在同一行。 • 双斜杠后面是注释,在程序中不参与执行,用于增加程序的可读性。 • ActionScript是区分大小写字母的。

  26. 单球鼠标跟随 • 在[跟随]元件中的第一帧: A=12; this._x=this._x+_xmouse/A; this._y=this._y+_ymouse/A;

  27. 多球鼠标跟随 • 第一帧: copies=5; for(var i=1;i<=copies;i++){ duplicateMovieClip("drag0","drag"+i,i); eval ("drag"+i).num=i; }

  28. 场景中拖入[影片剪辑]物体代码: 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; }

  29. 水波鼠标跟随 • 建立两个图层,动画层和AS层 • 动画层拖入影片剪辑 • AS层输入代码段: • 第一帧: movie._visible = 0; • 第二帧:见后面 • 第三帧:gotoAndPlay(2);

  30. 第二帧 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;

  31. 第三节 事件和事件处理函数 1.事件分类及处理事件的方法 Flash中的事件包括用户事件和系统事件两类。 • 用户事件是指用户直接交互操作而产生的事件。例如鼠标单击或按下键盘键之类的事件。 • 系统事件是指Flash Player自动生成的事件,它不是由用户直接生成的。例如影片剪辑在舞台上第一次出现或播放头经过某个关键帧。

  32. 一般情况下,在以下几种情况下会产生事件: • 当在时间轴上播放到某一帧时。 • 当某个影片剪辑载入或卸载时。 • 当单击某个按钮或按下键盘上的某个键时。 Flash MX 2004提供了三种编写事件处理程序的方法: • 针对对象的on()事件处理函数 • 事件处理函数方法 • 事件侦听器

  33. 2.针对按钮对象的on()事件处理函数 on()事件处理函数是最传统的事件处理方法。它直接作用于按钮元件实例,程序代码要编写到按钮实例的动作脚本中。on()函数的一般形式为: on(鼠标事件){       //此处是语句,语句响应鼠标事件 } 鼠标事件是“事件”触发器,事件发生时,执行大括号中的语句。比如press是在鼠标指针经过按钮时按下鼠标按钮时产生的事件。

  34. 定义按钮的动作脚本 选择舞台上的第1个按钮,打开【动作】面板,在其中输入“on(”,这时弹出一个鼠标事件下拉列表,从其中双击【press】,然后输入:){play();} 第一个按钮的完整的动作脚本是: on(press){ play(); } • 这个动作脚本的功能是,当用鼠标单击这个按钮时,舞台上的动画开始播放。

  35. 第2个按钮的动作脚本和第1个的定义过程类似,先选择第2个按钮,在【动作】面板中按照前面的方法定义这个按钮的动作脚本:第2个按钮的动作脚本和第1个的定义过程类似,先选择第2个按钮,在【动作】面板中按照前面的方法定义这个按钮的动作脚本: on(press){ stop(); } 这个动作脚本的功能是,当用鼠标单击这个按钮时,舞台上的动画停止播放。

  36. 3.事件处理函数方法 • 事件处理函数方法是一种类方法,事件在该类的实例上发生时产生调用。例如,Button(按钮)类定义onPress事件处理函数,只要按下鼠标就对Button对象调用该处理函数。Flash Player在相应事件发生时自动调用事件处理函数。 • 要让应用程序响应该事件,需要使用 function语句定义一个函数,然后将该函数分配给相应的事件处理函数。

  37. 事件处理函数由三部分组成:事件所应用的对象、对象的事件处理函数方法的名称和分配给事件处理函数的函数。事件处理函数的基本结构为: 对象.事件处理函数方法名称= function () { // 你编写的程序代码,对事件作出反应 } (1)定义按钮实例名称 按照前面的方法,并且引用两个按钮元件实例。分别单击两个按钮实例,在【属性】面板中分别定义它们实例名称为:play_btn和stop_btn。

  38. (2)定义事件处理函数 • 新建一个图层,并将它重新命名为“action”。选择这个图层的第1帧,在【动作】面板中定义这个帧的动作脚本为: play_btn.onPress=function(){ play(); } stop_btn.onPress=function(){ stop(); }

  39. 4.事件侦听器 • 事件侦听器让一个对象(称作侦听器对象)接收由其他对象(称作广播器对象)生成的事件。广播器对象注册侦听器对象以接收由该广播器生成的事件。例如,你可以注册按钮实例可以从文本字段对象接收onChanged通知。 • 说明:可以注册多个侦听器对象以从一个广播器接收事件,也可以注册一个侦听器对象以从多个广播器接收事件。

  40. 事件侦听器的事件模型类似于事件处理函数方法的事件模型,但有两个主要差别:事件侦听器的事件模型类似于事件处理函数方法的事件模型,但有两个主要差别: • 向其分配事件处理函数的对象不是发出该事件的对象。 • 调用广播器对象的特殊方法addListener(),该方法将注册侦听器对象以接收其事件。 • 要使用事件侦听器,需要用具有该广播器对象生成的事件名称的属性创建侦听器对象。然后,将一个函数分配给该事件侦听器(以某种方式响应该事件)。最后,你在正广播该事件的对象上调用addListener(),向它传递侦听器对象的名称。

  41. 事件侦听器模型的一般形式为: listenerObject.eventName= function(参数){//定义侦听器对象事件函数 // 此处是你的代码 }; broadcastObject.addListener(listenerObject); 其中listenerObject是指定侦听器对象的名称,可以是任何对象;broadCastObject是名称,eventName是事件名称。事件名称是在广播器对象(broadCastObject)上发生的事件,然后将该事件广播到侦听器对象(listenerObject),侦听器对象的事件函数对事件作出反应。

  42. 5.按钮事件和MC事件 on()处理函数处理按钮事件,而onClipEvent()处理函数处理影片剪辑事件。两种处理函数事件类似 完整地列举一下on()和onClipEvent()事件处理函数所支持的事件。

  43. (1)on()事件处理函数所支持的事件 • press:事件发生于鼠标在按钮上方,并按下鼠标时。 • release:事件发生于在按钮上方按下鼠标,接着松开鼠标时。也就是“按一下”鼠标 • releaseOutside:事件发生于在按钮上方按下鼠标,接着把鼠标移到按钮之外,然后松开鼠标时。 • rollOver:事件发生于鼠标滑入按钮时。

  44. rollOut:事件发生于鼠标滑出按钮时。 • dragOver:事件发生于按着鼠标不松手,鼠标滑入按钮时。 • dragOut:事件发生于按着鼠标不松手,鼠标滑出按钮时。 • keyPress:事件发生于用户按下指定的按键时。

  45. (2)onClipEvent()事件处理函数所支持的事件 onClipEvent()事件处理函数使用的一般形式为: onClipEvent(movieEvent){ // 此处是你的语句,用来响应事件。 } • 其中movieEvent是一个事件“触发器”。当事件发生时,执行该事件后面大括号中的语句。

  46. 对于影片剪辑而言,可指定的触发事件有9种 • load:影片剪辑一旦被实例化并出现在时间轴中时,即启动此动作。 • unload:在时间轴中删除影片剪辑之后,此动作在第1帧中启动。在向受影响的帧附加任何动作之前,先处理与Unload影片剪辑事件关联的动作。 • enterFrame:以影片剪辑帧频不断触发的动作。首先处理与enterFrame剪辑事件关联的动作,然后才处理附加到受影响帧的所有帧动作。

  47. mouseMove:每次移动鼠标时启动此动作。_xmouse和_ymouse属性用于确定当前鼠标位置。mouseMove:每次移动鼠标时启动此动作。_xmouse和_ymouse属性用于确定当前鼠标位置。 • mouseDown:当按下鼠标左键时启动此动作。 • mouseUp:当释放鼠标左键时启动此动作。 • keyDown:当按下某个键时启动此动作。 • keyUp:当释放某个键时启动此动作。

  48. data:当在loadVariables()或loadMovie()动作中接收数据时启动此动作。当与loadVariables()动作一起指定时,data事件只在加载最后一个变量时发生一次。当与loadMovie()动作一起指定时,获取数据的每一部分时,data事件都重复发生。data:当在loadVariables()或loadMovie()动作中接收数据时启动此动作。当与loadVariables()动作一起指定时,data事件只在加载最后一个变量时发生一次。当与loadMovie()动作一起指定时,获取数据的每一部分时,data事件都重复发生。

More Related