




已阅读5页,还剩99页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第7章,ActionScript应用,学 习 目 标,本章主要介绍了ActionScript的语法,包括数据类型、表达式和运算符的应用;动作脚本的基本语法规则;变量、函数的声明与使用;动作面板的使用;条件/循环控制脚本;在帧、按钮和影片剪辑上插入动作脚本等。,本 章 重 点,动作面板 ActionScript基础语法 在按钮中插入ActionScript 在帧中插入ActionScript 在影片剪辑中插入ActionScript,7.1 ActionScript概述,7.1.1 什么是ActionScript ActionScript(简称AS)就是动作脚本的意思,ActionScript 是Flash中内建的一种脚本编程语言,它在 Flash 内容和应用程序中实现了交互性、数据处理以及其它许多功能,它是由Flash播放器中的ActionScript虚拟机来执行的。 掌握了ActionScript,用户不仅能够制作出普通的观赏性的动画,还能够利用鼠标或键盘控制动画;不仅可以控制动画的播放或停止、音乐的打开或关闭、链接到指定的网页或文件等,还可以创建交互式网页,让用户填写表单、反馈用户信息,或者玩精彩互动游戏等。只要用户有创意,动作脚本的发挥空间是无限大的。,7.1.2 ActionScript的版本,最早在Flash3中,Macromedia公司在其中加入了一套早期的ActionScript 版本,这时候的代码和Basic语言很相似,用于完成一些简单的交互动作,功能很简单,语法冗长,执行效率也不好,且不容易掌握。,Macromedia公司在2007年推出Adobe Flash cs。Flash cs的创作环境有一些相关的改进,引入了最新且最具创新的ActionScript版本,即ActionScript 3.0。虽然 ActionScript 3.0 包含 ActionScript 编程人员所熟悉的许多类和功能,但 ActionScript 3.0 在架构和概念上是区别于早期的 ActionScript 版本的。ActionScript 3.0 中的改进部分包括新增的核心语言功能、增强的灵活性及更加直观和结构化的开发。其中一个最主要的特性就是能够让用户在时间线动画与代码中进行转换,将它们放到ActionScript中,再转换出来。这样可以使设计者和开发者的工作结合在一起。并且,ActionScript 3.0在flashPlayer中的回放速度要比ActionScript 2.0快10倍,因此它既高速又高效。,7.1.3 如何选用ActionScript的版本,在 Flash Player cs 中,可以运行在早期 Flash Player 版本中运行的任何内容。但是,在 Flash Player cs 中使用了 ActionScript 3.0 后,在兼容性方面存在了一些问题。,Flash cs允许用户输出与某个Flash Player版本兼容的.swf文件。要设置一个.swf文件的版本,具体操作步骤如下: (1)运行Flash cs程序,在“欢迎屏幕”中,选择 “Flash文件 (ActionScript 2.0)”选项,如图7-1所示(在本书第七、八两章中如不加特别说明,新建文件时均为“Flash文件 (ActionScript 2.0)”选项)。 (2)选择【文件】|【发布设置】命令,在对话框中选择Flash选项卡,从“版本”下拉列表中选择版本,如图7-2所示。,图7-1 新建Flash文档,图7-2 发布设置中的Flash版本,7.2 认识【动作】面板,在Flash中,ActionScript 2.0程序根据编写的位置不同可以分成四种:(1)添加到按钮实例上的代码;(2)添加到帧上的代码;(3) 添加到影片剪辑实例上的代码;(4)利用脚本编辑器编写的外部类的.as文件。前三种代码是利用【动作】面板添加的。但到了ActionScript 3.0中却只允许向帧添加代码。,【动作】面板用于组织动作脚本,是制作动画过程中进行脚本编写的重要场合,用户可以用面板中自带的语言脚本也可以自己添加脚本来制作动画效果。Flash cs为用户提供了人性化的脚本编辑环境。不使用【动作】面板时它处于关闭状态,选择【窗口】|【动作】命令或按F9即可打开【动作】面板。若暂时不用【动作】面板,可以单击面板的标题来收缩面板,以节省空间,再次单击可以展开面板。,【动作】面板由以下几个部分组成,如图7-3所示。图7-3 【动作】面板 命令列表框 脚本编辑窗口 脚本导航器,图7-3 【动作】面板,工具栏 【将新项目添加到脚本中】按钮 【查找】按钮 【插入目标路径】按钮 【语法检查】按钮 【自动套用格式】按钮 【显示代码提示】按钮,图7-3 【动作】面板,【快捷菜单】按钮 单击【快捷菜单】按钮,即可打开快捷菜单,如图7-12所示。菜单中包括一些常用的命令,为制作动画提供了方便。,图7-12 快捷菜单,脚本助手 在FlashMX2004版本中去除了脚本编辑器的普通模式,这给许多想学习脚本的爱好者带来了不少的困难。Flashcs版本中的“脚本助手”即是FlashMX2004之前版本的编辑器经过改进后的普通模式,而且比以前的版本更加完善。“脚本助手”是通过选择动作命令并在专门的编辑界面中通过编辑生成脚本,这个界面包含文本字段、单选按钮和复选框,可以提示正确变量及其他脚本语言构造,如图7-13所示。,图7-13 脚本助手,除了通过【动作】面板向对象或帧添加动作脚本外,还可以利用脚本编辑器直接编写外部类的.as文件。在“欢迎屏幕”中选中“ActionScript”文件,即可创建一个外部类的.as文件,如图7-14所示,此时会打开ActionScrip文件的编辑界面,如图7-15所示。,图7-14 创建ActionScrip文件,图7-15 ActionScrip文件编辑界面,7.3 ActionScript编程基础,7.3.1 语法规则 Flash cs中的脚本与其他的脚本语言一样,也有变量、函数、运算符和保留关键字等语言元素。它有自己的一套语法和标点符号使用规则,在编写ActionScript脚本时,必须遵守其编写时的语法规则,才能编写可以准确编译和运行的程序。,1、点语法,在AS中,点运算符被用来指明与某个对象或电影剪辑相关的属性和方法,也用于标识指向电影剪辑或变量的目标路径。用点运算符表达对象的属性,开始是对象或影片剪辑名,然后是一个点,最后是要指定的属性、方法或变量。如:window._x表示实例名为window的_x属性。 点语法使用_root和_parent两个特殊的别名。_root是指主时间轴,可以使用_root别名创建一个绝对路径。例如,_root.window.play();语句将使主时间轴中的影片剪辑window开始播放。可以用别名_parent引用嵌套在当前影片剪辑中的影片剪辑,也可以用_parent创建一个相对目标路径。例如,如果影片剪辑tom嵌套在影片剪辑person中,那么在对象tom上的_parent.stop();语句告诉person停止播放。,2、大括号,使用大括号 () 可以将 ActionScript 事件、类定义和函数组合成块。可以将左大括号与声明放在同一行中。也可以将左大括号放在声明下边的一行。编码约定建议将左大括号放在同一行中以保持一致性。大括号必须是成对出现的。例如, onClipEvent (load) timer=new Date(); ,3、分号,AS语句用分号结束,每条语句的结尾都应该加上分号,如果省略语句结尾的分号,AS仍然能编译用户创建的脚本,在【动作】面板或“脚本”窗口中单击“自动套用格式”按钮后,将自动在语句的结尾添加分号。使用分号终止语句使用户能够在单个行中放置不止一条语句,但是这样做往往会使代码难以阅读。例如,下面的语句以分号结束: myClip._alpha =50;,4、圆括号,圆括号主要有以下几种用途: (1)在定义函数的时候,所有形参必须放在圆括号内;调用函数的时候,实参也必须放在圆括号中。 function myFunction (name, age, reader) 在数学表达式中用圆括号改变运算的顺序。 trace(2 + 3 * 4); / 14 trace( (2 + 3) * 4); / 20 在循环和选择结构体中的循环条件和选择条件的描述,放在结构体的圆括号中。 /循环结构体 for(var i=0;i20;i+) /code /选择结构体 if(choose= =true) /code ,5、字母的大小写,在为 Flash Player 7 及更高版本编写 ActionScript 时,关键字、类名、变量名、方法名等是严格区分大小写的,如果在用到关键字时没有使用正确的大小写,脚本将会出现错误。如果变量的大小写稍有不同就会被视为是彼此不同的。下面的3个变量名称表示3个不同的变量。 var myVar=10; var MyVar=10; var myvAr=10;,6、注释,注释在程序中起到很重要的作用,在Flash中,沿用了C语言的注释符号“/”和“/* */”注释部分在默认的条件下显示为灰色。Flash在执行的时候会自动跳过注释语句而运行下面的程序。注释的内容在编译过程中将被忽赂掉,所以不会影响发布的最终文件的体积。在某一行之前添加/,可以使这一行代码变成注释。需要添加多行注释的时候,在开始行的前面添加/*,在结束行的末尾添加*/即可。多行注释中的注释部分格式保持不变,这个好处在编写代码的时候,当不需要实现某一部分代码的功能的时候,可以使用多行注释符号把它注释掉,这个小技巧在代码的调试过程中十分有用。注意的是多行注释的“/* */”成对出现,且/*在前*/在后。,7、关键字,ActionScript中的一些单词专用于脚本语言中,不可以将它们作为变量、函数等的名称。下面中列出了ActionScript的一些关键字。 break for if else continue in while this return with var void,7.3.2 变量,变量是用来保存信息的“容器”,保存的信息可以改变,而“容器”不改变。当播放动画时,通过变量可以记录和保存用户操作的信息,记录动画播放时改变了的值,或者计算某些条件是真还是假。要查看变量的值,请使用 trace() 语句向【输出】面板发送值。然后,在测试环境中测试 SWF 文件时,值显示在【输出】面板中。,1、变量命名,变量必须是一个标识符,它的名称第一个字符必须是字母、下划线(_)或美元符号($),其后的字符可以是数字、字母、下划线(_)或美元符号($)。firstName、_foot、$value等是合法的变量名称。如果使用如8cuo等不合法的变量名称,编译的时候会报错。变量的名称不能使用Flash中的关键字,而且在变量使用的范围内,变量的名称必须惟一,否则可能会引起程序的意外错误。 变量可以存储任意类型的数据:数值、字符串、逻辑值、对象或影片剪辑。每个动画或影片剪辑都有它自己的一组变量,每个变量都有它自己的值,并与其他动画或影片剪辑中的变量无关。,2、声明变量,声明变量,即告诉Flash创建了一个变量。 使用 set variable 语句(在“命令列表框”中【语句】|【变量】下)可以声明全局变量。如果动画或影片剪辑中不含有指定的变量,当第一次为此变量赋值时,Flash将自动创建该变量。 set()的语法格式为: set(“variableString“,expression) 其中,参数 variableString 是字符串,它命名一个用于保存 expression 参数的值的变量,而不是变量名。expression可以是数学表达式或字符串表达式。如果将一个现有的变量名作为第一个参数传递给 set() 而没有用引号(“)将名称括起来,则会首先计算该变量,然后将 expression 的值赋予它。,例如,如果创建一个名为 myVariable 的字符串变量并且对它赋值“Tuesday“,然后忘了使用引号,就会不小心创建一个名为 Tuesday 的新变量,它包含用户想分配给myVariable 的值: var myVariable:String = “Tuesday“; set(myVariable, “Saturday“); trace(myVariable); / 输出 Tuesday trace(Tuesday); / 输出 Saturday 可以通过使用引号 (“) 来避免这种情况: set(“myVariable“, “Saturday“); trace(myVariable); /输出 Saturday 声明全局变量更快捷的方法使用赋值符号(=),将=右侧参数的类型赋予左侧的变量、数组元素或属性。例如: myVariable=“Saturday“;,我们还可以使用var语句来声明局部变量。其格式为: var variableName = value1.,variableNameN=valueN 其中,variableName是变量名,应遵循变量名命名规则。 用 var 定义的变量是包含它的代码块的局部变量。代码块是用大括号 () 区分的。如果变量是在函数内声明的,则这些变量是局部变量,它们是为该函数声明的,在函数调用结束时到期。如果在函数外声明变量,变量在包含该语句的整个时间轴中可用。 如果要将变量与一个数据类型相关联,则必须在声明变量时进行此操作。在声明变量时不指定变量的类型是合法的,但这在严格数据类型下将产生编译器警告。可通过在变量名后面追加一个后跟变量类型的冒号 (:) 来指定变量类型。例如,可以声明一个名为 firstName 的变量下面的语句声明了一个变量firstName,并且指定它的数据类型为String。 var firstName:String;,3、变量赋值,首次声明变量时,这个变量还是空的,没有任何信息,最好为该变量赋一个值。指定一个初始值称为初始化该变量,初始化变量有助于在播放 SWF 文件时跟踪和比较变量的值。未初始化的变量的默认值为 undefined。赋值过程通过“=“赋值运算符完成。下面的语句给前面声明的变量firstName赋值“kingchild”。 firstName=“kingchild“ 通常可以把变量声明和变量赋值语句写在一起。 var firstName:String=“kingchild“; 还可以使用表达式将表达式的结果赋值给一个变量。 var sum:Number:=3*4十8; 通过连等的方式可以把一个值赋给多个变量。 var num0:Number; var num1:Number; var num2:Number ; num0 = numl=num2=10;,4、检查变量的值,测试程序的时候,随时追踪一个变量的值很重要。在Flash中提供了一个内置函数trace(),可以在输出面板中显示变量的值。在【动作】面板中输入如图7-16中的代码后测试影片,弹出如图7-17所示的输出面板,面板中显示了变量的值。若声明一个变量后没有赋值,用trace()输出后显示为undefined(末定义)。,图7-16 输入trace(),图7-17 输出界面,5、变量的范围,在flash中变量的作用域是指变量在其中声明,并且可以引用的范围。根据变量的作用域,可以把变量分成3种: (1)时间轴变量:时间轴变量是使用var关键字在主场景或电影剪辑实例的时间轴上声明的变量。 (2)全局变量:全局变量对Flash文档中所有的范围都是“可见的”,在所有的不同级别电影剪辑中都可以直接访问,不需要像时间轴变量那样需要通过路径访问不同级别电影剪辑上的时间轴变量。声明全局变量只需在变量名称前添加_global标识符即可。 (3)本地变量(局部变曼):定义函数时,在函数内部使用var关键字声明的变量。局部变量仅仅在函数块的内部是“可见的”,在函数的外部不能访问到函数的局部变量。,6、原始数据类型,数据类型描述了动作脚本的变量或元素可以包含信息的种类。在创建变量、对象实例和函数定义时,用户需要使用数据类型来指定要使用的数据的类型。在编写 ActionScript 时可以使用多种不同的数据类型。动作脚本有两种数据类型:原始数据类型和引用数据类型。 原始数据类型指Boolean(布尔值)、null(空值)、Number(数值)、String(字符串) 和 undefined(未定义)。它们拥有固定类型的值,因此可以包含它们所代表元素的实际值。 引用数据类型指MovieClip(影片剪辑)和Object (对象),它们的值的类型是不固定的,因此它们包含对该元素实际值的引用。,7.3.3 运算符,运算符是可以提供对数值、字符串、逻辑值进行运算的关系符号。运算符操作的元素称为操作数。运算符的种类有很多,根据运算符所带操作数的数量的不同,把ActionScript2.0中的运算符分成3类。 (1)一元运算符:只有一个操作数。如表达式-x中的取反运算符(-); (2)二元运算符:有两个操作数。如表达式x+y中的加号(+); (3)三元运算符:有三个操作数。如表达式(xy)?max=x:max=y;中的条件运算符 (?:)。,赋值运算符,二元运算符,有两个操作数,它根据一个操作数的值对另一个操作数进行赋值。一般的格式如下: var x:Number = 5;/ 将值 5 赋予变量 x var x:Number = 5+3;/ 将表达式5+3的值赋予变量 x; 还可以使用赋值运算符给同一表达式中的几个变量赋值。在下面的语句中,值 10 会被赋予变量 numOne、numTwo 和 numThree。 var numOne:Number; var numTwo:Number; var numThree:Number; numOne = numTwo = numThree = 10;,算术运算符,算术运算符对数字操作数执行算术运算。 加号(+) 递增 (+) 减号或取反运算符 递减 乘号(*) 除号 取模运算符(%) 算术复合赋值运算符,关系运算符,关系运算符用于比较两个表达式的值,并且返回一个布尔值(true或false),关系运算符常常用于循环语句和条件语句中。如下面的例子当i小于5的时候,输出i的值。 for(var i=0;i)和大于等于(=) 小于()和小于等于(=),逻辑运算符,逻辑运算符用于将多个关系表达式或逻辑量连接起来组成逻辑表达式,常用于在条件或循环语句中判断多个条件的时候。 逻辑与(&) 逻辑或(|) 逻辑非(!),按位运算符,位运算符是低级计算机语言如汇编语言中处理数字最原始的方法,因为其本身运算速度快等优点,所以在很多高级语言中还包含了这些运算符。ActionScript2.0中也包含了这些按位运算符,只是用得比较少,下面简要地介绍一下这些按位运算符。,按位与(/输出8,按位或(|) 按位或(|):二元运算符,运算的时候,将Flash转换的32位二进制数按位进行或的运算,当两个相应的二进制位其中有一个是1的时候,结果为1,否则为0,如:0|0的结果为0,0|1的结果为1,1|0的结果为1,1|1的结果为1。 当执行12|9运算的时候,实际的运算过程是: 00000000000000000000000000001100 (12) | 00000000000000000000000000001001 (9) 00000000000000000000000000001101 (13) trace(12 | 9);/输出13,按位取反() 按位取反():一元运算符,运算的时候,Flash将运算数转化为32位的二进制数,再按位进行非的运算。注意0的结果是-1,因为在32位二进制表示0的时候是00000000000000000000000000000000,按位取反后是11111111111111111111111111111111表示十进制(-1)。 最简单的记忆规则是十进制的数字按位取反后的结果等于原来的数字取反后减1,如: trace(22); /输出-23 trace(-36); /输出35,按位异或() 按位异或():二元运算符,运算的时候,将Flash转化后生成的32位的二进制数按位进行异或运算。当两个相应位置的二进制同时为1或0的时候结果为0,否则结果为1。如:00的结果为0,0l的结果为1,10的结果为1,ll的结果为0。 trace(12 9);/输出5,按位左移() 按位左移():二元运算符,第一个运算数是需要进行移位的数字,第二个运算数是用来描述移多少位的正整数,运算的时候,Flash先将第一个运算数转化成32位的二进制数,再左移第二个运算数指示的位数。 trace(110);/输出1024 在上例中1处理成二进制代码为00000000000000000000000000000001左移10位以后为00000000000000000000010000000000等于十进制的1024,相当于乘以210。当第二个运算数大于32时会自动对它取模后再移位,移位时在二进制右边添加相应位数的0,并抛弃左边相应的位数。浮点数通过舍去小数点后面的所有位来转换为整数。如: trace(1.1335); /输出8,按位右移() 按位右移():二元运算符,使用方法和按位左移( 3);/输出0 trace(1024 8);/输出4,相当于除以28,按位无符号向右移位 此运算符与按位向右移位运算符 () 基本相同,只是此运算符不保留原始表达式的符号,因为左侧的位始终用 0 填充。,按位运算复合赋值运算符 和算术复合赋值运算符一样,按位运算符和赋值运算符结合组成按位运算复合赋值运算符,在语句中可以提高代码执行效率。,其他运算符,条件运算符 条件运算符(?:):三元运算符,使用方法如下: var x:Number = 5; var y:Number = 10; var z = (x6) ? x : y; trace(z);/ 输出 5 执行语句的时候,首先判断第一个表达式的返回值,若是返回值为true则执行第二个表达式,返回值为false则执行第三个表达式。,括号运算符 括号运算符(()):括号运算符可以改变表达式中运算符的优先级。如: var x:Number=2*3+4; trace(x);/输出10 var y:Number=2*(3+4); trace(y);/输出14,改变运算符的运算优先级后括号中的最先运算 或者括住一个或多个参数并将它们作为参数传递给括号外的函数。 var today:Date = new Date(); trace(today.getFullYear(); /输出当前年份 function traceParameter(param):Void trace(param); traceParameter(2*2);/输出 4,逗号运算符 逗号运算符(,):使用逗号运算符可以在只要一个表达式的地方对两个或多个表达式计算,主要用于平行声明多个变量和在for循环语句中。如: var x:Number = 1, y:Number = 2, z:Number = 3; 相当于: var x:Number = 1; var y:Number = 2; var z:Number = 3; 在循环结构中: for (var i = 0,j = 0;i10,j10;i+,j+) /执行语句 ,new运算符 new运算符:用于创建一个类的实例,如下面的代码中创建了Array类的一个实例myArray。 var myArray:Array = new Array(); delete运算符 delete运算符:可用于删除一个对象、对象属性、数组元素、变量等。下面的例子中删除一个对象myArray: delete myArray;,点运算符 点运算符(.):点运算符用于指示路径关系,也可以用来获取对象的属性值和调用对象的方法。下面的例子分别获取对象myObject的num属性和调用myObject的max方法。 myObject.num; myObject.max();,运算符的优先级和结合顺序,在一条语句中使用两个或多个运算符时,一些运算符会优先于其它的运算符。运算符的优先级和结合律决定了处理运算符的顺序。ActionScript 具有一种确定哪些运算符在其它运算符之前执行的层次结构。如: 6+5*6; /值为36 var x:Number = 20; var y:Number = 9; trace(x10 /输出false,7.3.4 表达式,表达式是 Flash 可以计算并返回值的任何语句。可以通过组合运算符和值或者调用函数来创建表达式。表达式的初始值是字符串还是数值,取决于参数的默认类型。例如,gotoAndPlay语句中的scene是字符串,故用来设置该参数的表达式类型默认为字符串型。,7.3.4 表达式,数值表达式 数值表达式可为变量赋整数值。它可由数字、数值型变量和算数运算符共同组成。算数运算符包括+、-、*、/、=、=等。 例如,1+1就是最简单的数值表达式。而表达式count = count+1中的count+1联合使用了变量和数值,表示将当前变量count加1后的值赋给变量count。,字符串表达式 字符串表达式是由字符串和字符串变量通过字符串运算符连接而成的表达式。Flash将所有被双引号括起来的字符看作是字符串。通过字符串运算符可使字符串之间发生联系,从而生成新的字符串内容。字符串运算符包括 :“”(字符串号)、=(等于号)、=(严格等于号)、!=(不等于号)、!=(完全不等号)、(大于号)、=(大于等于号)、(小于号)、=(小于等于号)等。 字符串表达式中的内容可以是字符串变量,或是用双引号括起来的文本(即字符串变量值),或为字符串赋值的函数。例如,字符串表达式 Hello,+Mary.表示将字符串Hello,和Mary.连接起来,组合结果是Hello, Mary.。,逻辑表达式 逻辑表达式用于表示执行制定动作时应具备的条件,由逻辑运算符将数值表达式连接而成。逻辑运算符包括&(与)、!(非)以及|(或)。,7.3.5 函数,“函数”是执行特定任务并可以在程序中重用的代码块。函数的主要特点是封装性,简单来说,把多个语句集中到一个函数中,并用于实现特定的功能就叫做封装。函数的封装提高了代码的可重复使用性,一些功能完善,封装良好的函数还可以用作函数库在多个Flash文件中使用。使用函数时,程序运行过程实际上是调用不同函数的过程。使用封装良好的函数会使程序更简洁,更有条理性。,按照函数有无参数可以分成有参函数和无参函数。 有参函数:在定义函数的时候声明函数的形式、参数个数和类型,在调用函数的时候传递相应的实际参数。 无参函数:在定义函数的时候不给出形式参数,调用的时候可以不需要传递实际参数,通常这种函数用于完成固定的运算,但是这种无参函数也可以传递实际参数。 按照函数有无返回值可以分成有返回值函数和无返回值函数。 有返回值函数:理论上来说所有函数都有返回值,在ActionScript2.0采用严格类型定义函数时,需要声明函数返回值的类型,可以是Flash中任何类型,也可以是自定义的类型。 无返回值函数:也就是在ActionScript2.0采用严格类型定义函数时返回值类型为Void的函数,Void是空的意思,也就是这种函数没有任何返回值。这种函数通常用作完成一定的运算,而不返回任何值。,创建函数,函数的创建形式-命名函数 创建ActionScript2.0严格数据类型函数使用function关键字(在【语句】|【用户定义的函数】下)表示函数声明的开始,函数名和标识符的命名规则相同,当函数为有参函数时在括号中声明函数的形参及类型,当函数为无参函数时,在括号内不要包括任何形参,在括号后声明函数返回值的类型,整个函数体由大括号包含。,函数的另一种创建形式匿名函数 在这种形式下通常定义一个匿名函数,再把它赋值给一个变量,上面的sum函数写成这种形式如下: var sum = function (x:Number, y:Number):Number return x+y; ; trace(sum(1, 2);/输出3,调用的时候,还是采用在变量名后加括号,并在其中传递实参的/形式 匿名函数是表达式。这意味着匿名函数不能独立存在,只能用作语句(通常是赋值语句)的一部分。,形参和实参,在定义函数时函数名后括号中的变量名称为形式参数(简称形参),形参名可以是任何合法的标识符,使用冒号在形参名后指明参数的类型,多个形参之间用逗号隔开。调用函数的时候函数名后括号中的参数(或表达式)称为实际参数(简称实参)。形参相当于实参的占位符。,关于形参和实参需要清楚以下几点: (1)形参除了起占位作用与声明参数类型外没有任何实际意义,所以形参名可以为任何的合法标识符,和程序中己声明的变量或对象的实例名相同也没有关系。 (2)实参可以是常量、变量、数组元素和表达式等,但是要求这些变量、表达式等都有确定的值,在函数调用时实际传递的是它们的值。 (3)调用函数时实参的个数需和形参个数一致,当实参个数少于形参个数的时候,不会引起编译错误,但是可能得到意外的结果;当实参个数多于形参的时候,多余的参数将自动舍弃,不会引起编译错误,但是可能得到意外的结果。 (4)实参的类型必须和定义函数声明的形参的类型一致,否则将引起编译错误。,函数调用,函数调用,是向函数传递实参,完成函数预定功能或返回一定值的过程。函数调用的时候,被调用的函数必须是己经存在的函数,在调用语句之前定义或者在调用语句之后定义效果一样。函数调用的一般形式如下: sum(2,3); 上面的代码调用了函数名为sum的函数,并且向它传递了实参2,3。向函数传递实参需要满足在函数参数部分所讲的形参和实参的关系。调用函数有以下3种: (1)作为一个独立的语句调用 sum(2, 3); (2)在表达式中调用 var myNum:Number = 5+sum(2, 3); 上面的语句中将sum(2,3)的返回值加5后再赋值给变量myNum。 (3)作为函数参数调用 var maxNum:Number=max(5,sum(2,3); 传递给函数max的实参是5和sum(2,3)的返回值。,函数的返回值,前面讲了在ActionScript2.0中依照严格数据类型定义函数的时候需要声明函数返回值的类型。在函数定义中使用return语句(在【语句】|【用户定义的函数】下)定义函数的返回值。,(1)函数定义是函数体中return关键字后的值,可以是一个变量值也可以是表达式,最终将返回变量或表达式的值。 (2)return后面的变量或表达式的值的数据类型一定要和定义函数的时候声明的返回值的类型一致,否则将引起编译错误。 (3)一个函数中可以有多个return语句,也就是可以返回多个不同的值。执行到哪一个return语句,返回哪一个语句的值。同时跳出函数体,函数体运行中止。,函数的作用域,根据函数的作用域不同,可以将其分成时间轴函数和全局函数。不同级别的时间轴函数可以通过附加路径信息的方式访问。,重要的内置函数,(1)trace() trace()函数可以接受任何类型的参数,如字符串、数字、变量、对象等。trace()这些参数的内容都转化为字符串输出到输出面板中。 (2) escape() 将字符串参数转换为以URL(Uniform Resource Locator,即平时说的网址)编码格式进行编码的字符串。在这种格式中,将所有非字母的字符都转义为%十六进制序列,通常在需要把URL信息传递给后台程序的时候,必须把URL信息转换成单一的不含有意义的符号的字符串。 (3)getTimer() 利用getTimer()可以返回自影片开始播放的毫秒数,在制作Flash游戏中用于实现计时的功能很有用。,重要的内置函数,(4)isFinte() 判断数值是否是无穷大,在Flash中允许的最大正值为1.79769313486231e+308(Number.MAX_VALUE),当数字大于这个数值的时候便认为是Infinity(正无穷大),允许的最小值为-1.79769313486231e+308(-Number.MAX_VALUE),当数字小于这个数值的时候便认为是-Infinity(负无穷大)。判断一个数值是不是无穷大使用isFinite(),返回值为false时,表示数字是无穷大,返回值为true时,表示数字不是无穷大。 (5)isNaN() 用于检测传递给isNaN()参数的数据类型是不是数字,当返回值为false时,表示参数的数据类型是数字,当返回值为true时,表示参数的数据类型不是数字。,重要的内置函数,(6)parseFloat() 只接受字符串类型的参数,当字符串由纯数字组成的话,返回浮点型数字,当字符串的第一个字符不是数字的时候,返回NaN(非数字),当字符串的第一个字符是数字字符时,返回第一个字符以及和它相连数字字符组成的数字。有效整数前面的空白将被忽略,有效整数后面的非数字字符也将被忽略。 (7)parseInt() 和parseFloat()不同的是parseInt()返回的是整型数字。以 0x 开头的字符串被解释为十六进制数字。以 0 开头的整数或指定基数为 8 的整数被解释为八进制数字。有效整数前面的空白将被忽略,有效整数后面的非数字字符也将被忽略。,函数应用实例,【例7-1】计算圆周长。本动画实例的目的是:自定义一个名称为circle的函数来计算圆的周长,并将计算结果显示在相应的文本框里。效果如图7-20所示。,图7-20 动画运行效果,7.3.6 程序控制语句,条件语句 if语句 利用if语句可建立一个可执行条件,如果条件为 true,则 Flash 将运行条件后面花括号 () 内的语句。如果条件为 false,则 Flash 将跳过花括号内的语句,而运行花括号后面的语句。if动作的位置在【命令列表框】中的【语句】|【条件/循环】中其格式为: if(condition) statement(s); 其中,condition为一个计算结果为 true 或 false 的表达式。 如: if(name= “tom”) trace(“A”); ,switch语句,switch语句与if else if语句的用途一样,用于在有多个分支的选择结构中选择执行的代码块。与 if 语句一样,switch 语句测试一个条件,并在条件返回 true 值时执行语句。所有 switch 语句都包含一个默认 case。默认 case 中应包含一个 break 语句,以避免在以后添加其它 case 时出现落空错误。其格式为: switch (expression) caseClause: defaultClause: 如: switch (number) case 1 : trace(“A“); break; case 2 : trace(“B“); break; default : trace(“D“); ,switch语句有其自身的特点,使用switch语句应该注意几点: (l)switch关键字后面的小括号中可以用任何表达式。 (2)当表达式的值和case后面的常量的值相等时,就执行case后面的代码块(特别注意的是case后面一定要是常量),当所有的case中的常量值和表达式的值都不相等时,便执行default后面的代码块。 (3)每一个case中的常量值必须互不相同,否则会出现相互矛盾的现象。 (4)各个case和defult的出现次序不会影响程序执行的结果。也就是说,可以先出现default再出现case。 (5)在每一个case后的代码块中必须含有break关键字,用于跳出结构体,否则将一直执行下去,得到的是执行最后代码块的结果。,【例7-2】身份验证。本动画实例的目的是:使用 if语句制作一个身份验证的界面,要求输入用户名和密码。效果如图7-24所示。,图7-24 动画运行效果,循环语句,在条件语句中当满足条件的时候便执行代码,但是只执行一次,当需要在某个条件下多次执行代码块的时候就要用到循环语句。在Flash中循环语句包括while、do while、for和for in 四种形式,这些动作都位于【命令列表框】中的【语句】|【条件/循环】。使用这些语句可以按指定的次数重复执行,或指定条件存在时重复执行。,while循环,while语句,执行的时候和if语句很相似。首先计算条件,如果条件计算结果为 true,则在循环返回以再次计算条件之前执行一条语句或一系列语句。在条件计算结果为 false 后,跳过该语句或语句系列并结束循环。其格式为: while(condition) statement(s); ,while 语句执行下面一系列步骤。第 1 步至第 4 步的每次重复,称作循环的一次迭代。每次迭代的开始将重新测试 condition,如下面的步骤所示: 计算表达式 condition。 如果 condition 计算结果是 true 或一个转换为布尔值 true 的值(如一个非零数),则转到第步。否则,while 语句结束并继续执行 while 循环后面的下一个语句。 运行语句块 statement(s)。 转到步骤。,do while循环,do while语句的特点是先执行循环体中的循环体,然后仅当条件计算结果是 true 时执行语句。其格式为: do statement(s); while (condition); 如: var sum:Number = 0; var i:Number= 0; do sum += 2; i+; while (i10) ; trace(sum);/输出结果为20,执行的时候,先执行一次循环体,然后判断循环条件是否满足,当条件满足时,返回重新执行循环体,直到不再满足循环的条件为止。和while语句一样,必须有使循环趋于结束的语句或跳出循环体的语句。从上面while循环中的例子可以看出,一开始就满足循环条件的话,则它们执行后的结果是一样的,但是它们一开始就不满足条件的话,则它们执行后的结果是不一样的。,for循环,for语句在Flash中使用最广,用法最灵活,不仅可以用于循环次数已知的情况,也可以用于循环次数不确定而只给出循环结束条件的情况,可以完全代替while语句。其格式为: for (init; condition; next) statement(s); 如: for (var i = 0; i10; i+) trace(i); ,for语句的应用形式可以简化为下面最容易理解的形式: for(循环变量赋初值;循环条件;循环变量增量) 运行的时候首先对循环变量赋值,然后判断循环条件,当满足条件的时候便执行循环体中的语句,并执行循环变量增值语句。当不满足条件的时候则跳过循环体,执行后续语句。,for in循环,for in语句专门用于遍历对象的所有元素,在Flash中并不常用。其格式为: for (variableIterant in object) statement(s); 如遍历数组的全部元素: var myNumArray:Array = 1, 2, 3, 4, 5, 6; for (var i in myNumArray) trace(myNumArrayi); 显示6,5,4,3,2,1。注意的是采用这种方式遍历数组元素,是从数组的最后一个元素往第一个元素的方向遍历,使用于其他对象时也是这种遍历方式。,break与continue语句,出现在循环(for、forin、dowhile 或 while)内或与 switch 语句中的特定情况相关的语句块内。当在循环中使用时,break 语句指示 Flash 跳过循环体的其余部分,停止循环动作,并执行循环语句后面的语句。当在 switch 中使用时,break 语句指示 Flash 跳过此 case 块中的其余语句,并跳到包含它的 switch 语句后面的第一个语句。 在嵌套循环中,break 语句只跳过当前循环的其余部分,而不是跳出整个系列的嵌套循环。,循环的嵌套,一个循环体内有包含另一个完整的循环结构,称之为循环的嵌套。在Flash中四种循环可以相互嵌套,使用不同的缩进,可以知道相互嵌套的关系。建议使用循环嵌套的时候尽量不要超过3层,否则将严重影响Flash播放器执行代码的效率。如: for (var i = 0; i10; i+) for (var j = 0; j10; j+) /code ,7.4 插入ActionScript代码,在制作flash时,拖动鼠标、播放动画到某一帧、按下按钮实例或影片剪辑实例等操作都会引起一个事件的发生。使用Flashcs制作交互动画时,可以通过三种方式触发事件。第一种被称为按钮触发事件,例如,单击鼠标或按下键盘的某个按键时触发事件;第二种被称为影片剪辑触发事件,例如,当影片剪辑元件被载入或被播放到某一帧时会触发事件;第三种被称为帧触发事件,例如,当动画播放到某一帧时即触发事件。要想通过按钮、影片剪辑和帧来触发事件就必须在这三者上添加代码,现在我们分别来看一下如何添加代码。,7.4.1 在按钮中插入ActionScript,设置具有交互性的按钮是制作交互式动画时最基本的功能,必须掌握。按钮动作的触发事件可以是鼠标的不同状态,如鼠标在按钮上单击、滑过、滑出、拖动等,也可以是按键操作。要想给按钮设置动作,必须先指定按钮的触发事件,然后再选择命令,只有这样才能当事件发生时,去执行设置的命令。设置按钮动作,并不会影响到其他对象。,【例7-3】设置按钮触发事件的操作步骤。 (1) 创建一个新文档,在舞台上创建一个按钮实例,或者选择【窗口】|【公用库】|【按钮】命令,从打开的【公用库】中将一个按钮拖动到“舞台”,并选中该按钮。 (2) 打开【动作】面板,选择 【全局函数】|【影片剪辑控制】命令,在命令列表中,双击 on命令,弹出按钮的触发事件列表,如图7-35所示,在列表中选择要加入的按钮命令。,图7-35 给按钮设置on语句,按钮可以触发的事件包括以下几种: press:在按钮上按下鼠标左键时,触发动作。 release:在按钮上按下鼠标左键后,在不移动鼠标的情况下松开鼠标左键时触发动作。 releaseOutSide:在按钮上按下鼠标左键,然后拖动鼠标,将鼠标指针从按钮上移走,再松开鼠标左键时,触发动作。 rollOver:鼠标指针由外向里滑过按钮时(末单击),触发动作。 rol1Out:鼠标指针由里向外滑过按钮时(末单击),触发
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 子宫腺肌病合并子宫内膜腺癌护理查房
- 慢性肾盂肾炎合并肾性高血压护理查房
- 阿拉尔市2025-2026学年七年级上学期语文月考模拟试卷
- 安徽省亳州市涡阳县2024-2025学年高一上学期第一次月考化学试卷及答案
- 2025 年小升初吕梁市初一新生分班考试英语试卷(带答案解析)-(外研版)
- 湖南省零陵区2025年5月中考思想品德历史综合模拟试题(无答案)
- 黑龙江2025年下半年城市规划师考试规划实务:人居环境科学和可持续发展考试题
- 【名师一号】2026届高考生物总复习体验双基考题:选修1 专题3 植物的组织培养和酶的研究与应用
- 社区科普知识课件
- 社区电梯安全知识培训课件
- 《俗世奇人》整本书导读课件
- 餐饮管理安全管理制度
- 传统白酒生产项目商业计划书
- 2025年教师资格证考试综合素质(中学)试题及答案
- 铁道概论(第八版)佟立本主编
- 2022年高校教师资格证(高等教育学)考试题库评估300题有解析答案(四川省专用)
- 精装修安全文明施工方案
- 肺结核共45张课件
- 心律失常介入治疗培训课件
- 施工现场签证单(模板)
- GB-T-13663-2000-给水用聚乙烯(PE)管材
评论
0/150
提交评论