1、第八章 ActionScript脚本语言,FlashMX2004网页动画,2,本章主要内容,Action基本语法 变量与表达式 控制结构 对象与事件编程,3,Action基本语法,点语法(.)用于指明某个对象或电影剪辑的属性和方法。 例:BallMC . play BallMC实例的play方法sun . earth . submit 电影剪辑 sun 下的电影剪辑 earth 中的变量 submit 斜杠语法(/):与点语法功能一致,早期版本使用。 实例:呼拉圈女孩,ActionScript基础语法,4,Action基本语法,点语法中与电影剪辑有关的特殊名称 _root:指主时间轴。 关键帧
2、上的电影剪辑实例可用_root.实例名表示 例:_root . sun this :本电影剪辑 _parent :指当前电影剪辑的上级电影剪辑 例: 电影剪辑sun 中嵌套电影剪辑earth, earth再嵌套电影剪辑moon,当前选中earth 则: this.earth 代表本电影剪辑 this.parent 代表电影剪辑sun(相对路程) _root.sum.earth.moon 代表电影剪辑moon(绝对路径) 实例:电影的层次,ActionScript基础语法,5,Action基本语法,注释: 句首加“ / ”,本行全为注释 “ /* ”至“*/”间全为注释,不管多少行 注释文字以灰
3、色显示 其他基础规则 语句用分号结束,亦可省略。 关键字区分大小写,其它不分。 关键字:与一般语言相同 系统常数:一般为大写字母,通常是键盘英文名。,ActionScript脚本语言,6,变量与表达式,字符串型(String) 字符串型用“ “作定界符 字符串型可做运算,意思是连接字符串 转义字符有效 数值型(Number) 数值型为双精度浮点数 可使用八进制(前加0)和十六进制(前加0x) 逻辑型(Boolean) True 或 1 为“真”,Flase 或 0 为“假” 未定义 undefined:变量目前无值或已出变量作用域,数据类型,7,变量与表达式,对象 影片剪辑:有自己的属性及值
4、例:myClip.alpha 为名为myClip的影片剪辑实例的Alpha属性,其值为100时为不透明 内建对象:系统事先定义对象,用于访问和处理特定种类信息 例:Math数学对象,其方法相当于数学函数 date日期对象,求当前日期 自定义对象:用户自己创建的对象 空值 null :即没有值,用于调试变量时表示变量没有值或函数没有返回值,及用于省略函数参数,数据类型,8,变量与表达式,算术运算符: 、/、%、 字符运算符 :连接字符串 关系运算符: 、或! (全等于)、!(全不等) 除了值两边数据类型也相同时全等结果才为true 逻辑运算符: &、 | |、 !,运算符,9,变量与表达式,赋值
5、运算符 =、+=、-=、*=、/=、%=、&=、=、|=、= 位运算 、|、 优先级:与C相似 括号、算术、字符、关系、逻辑、赋值,运算符,10,变量与表达式,变量类型 变量无固定类型,由所赋值决定类型 变量值可以是数值、字符串、逻辑值或表达式 变量定义 变量名遵守标识符规则,且可以使用中文 变量可以不预先定义,直接使用 例: x = 10 x为数值型变量 y = “name“ y为字符型变量 定义格式: var 变量名 = 初值,变量,11,变量与表达式,变量的作用域: 局部变量 局部变量是本段程序有效的变量 用var定义的变量为局部变量 全局变量 全局变量是全动画有效的变量 直接定义的变量
6、是全局变量 注意:此时如再次用var定义,则定义失效 实例:变量的值,变量,12,变量与表达式,变量同名处理 同脚本局部变量不可同名 不同场景、符号或图层可使用同名全局变量 同名变量引用时前面必须加动画名或符号名 实例: 同名变量,变量,13,变量与表达式,查看当前类型函数 格式 typeof ( 变量名 ) 类型转换函数 parseInt(变量名)字符串转换成整数 parseFloat(变量名)字符串转换成实数 eval( 表达式 ) 表达式字符串转换成数值 说明: 无法转换时显示NaN,类型转换,14,变量与表达式,语法:trace ( 变量名 ) 测试结果 菜单:“控制”“测试影片” 查
7、看:输出窗口中自动显示变量值 实例: 变量类型,trace语句,15,控制结构,赋值语句,赋值语句用于动画播放中给变量赋值 如果变量不存在,先产生一个,再赋值 添加赋值语句方法: set语句: 语法: set ( 名称 , 值 ) 参数:名称:变量或对象名,值:变量值 面板:“ 语句 ” “变量” “ set variable ”实例:set ( “x“ , 10 )set ( “c“ + i , x ) 注意:第一个参数的变量或对象名需用双引号作定界符,16,控制结构,直接赋值 例: x = 10 注意: 两种形式性质相同,一般可替换: 观察变量赋值情况 “控制”“测试场景” “调试”“参数
8、列表”从output窗口中查看变量值,赋值语句,17,控制结构,分支语句,Action也有if语句用于选择结构 二分支:if ( 条件 ) 语句1 else 语句2 条件表达式与C语言相似 例: if ( password = “abc123“ ) gotoAndPlay( 10 ); else gotoAndStop( 5 ); 实例:if的使用,18,控制结构,分支语句,多分支if (条件1) 语句1 else if (条件2) 语句2 else if (条件n) 语句n else 语句 n + 1 ,19,控制结构,多分支switch (表达式) case 1: 语句1; break;c
9、ase常量1:语句; break;case常量2:语句; break;case常量3:语句; break;.default:语句; break;,分支语句,20,控制结构,循环语句,当型循环条件为真时执行循环 while ( 条件 ) 语句 直到型循环 do 语句 while ( 条件 ) 注意:循环次数不得大于20000次 for循环 for( 表达式1 ; 表达式2 ; 表达式3 ) 语句,21,函数的使用,象其他高级语言一样,Action亦提供函数,作为结构化程序设计的模块 分类 内置函数系统已集成函数 方法:属于对象的函数。 如:hide( ) 隐藏对象 顶级(通用)函数:不属于对象的
10、函数。 如:getVersion( ) 获得当前FLASH版本,函数,22,函数的使用,函数,常用通用函数 eval(variable ):获取指定变量的值 true:得到“真” false:得到“假” Newline:插入新的一行 getTimer:得到系统当前时间 getVersion:显示播放时所用Flash版本 random( number):产生0到 number 1 间的随机整数。,23,函数的使用,函数,常用字符串函数 substring( string, index, count ):取 string 字符串的子串,从 index 开始取 count 个字符。 length(
11、string ):求字符串长度。 chr( aa ):取ASCII码值为 aa 的字符。 ord( bb ):取字符 bb 的ASCII码。 常用函数实例: 定时器,24,函数的使用,自定义函数: 包含了其它高级语言中的函数与子程序 定义格式: function 函数名(形参表) 函数体 说明: 只有帧动作窗口才可编写函数 形参允许无参,此时括号可以省略 函数有 return 语句时表示有返回值 同一窗口可编写多个不同名函数,不同窗口可编写同名函数,自定义函数,25,函数的使用,调用函数:函数名(实参表) 说明: 函数不需要声明 函数是全局的,所以对象动作窗口也可以调用帧窗口编写的函数 形参无
12、类型要求,调用时形参自动承接实参类型,但形实参个数需一致 形实参为变量时是传值调用,形实参为数组时是传址调用,自定义函数,26,对象与事件编程,对象与事件概述,对象是ActionScript编程中的重要要素 对象用属性来控制外观特征,用方法(函数)控制对象的行为 对象分类 电影剪辑:有自己的属性及值 内建对象:系统事先定义对象,用于访问和处理特定种类信息 自定义对象:用户自己创建的对象,27,对象与事件编程,对象与事件概述,事件是用户对对象的动作 ActionScript 是事件驱动编程,通过事件动态控制动画 事件分类 鼠标事件(On事件) 电影剪辑事件( OnClipEvent 事件),28
13、,对象与事件编程,按钮事件,按钮事件(On事件) 点击( press )鼠标在按钮上按下 释放( release )鼠标在按钮上按下后放开(默认) 释放离开( releaseOutside )鼠标在按钮上按下后在 按钮外放开 指针经过( rollOver )鼠标移至按钮上 指针离开( rollOut )鼠标离开按钮 拖放经过( dragOver )鼠标在按钮上按下并拖离再 移回按钮 拖放离开(dragOut)鼠标在按钮上按下并拖离按钮 按键(keyPress)键盘按键(在右框中输入按键名称),29,对象与事件编程,电影剪辑事件,电影剪辑事件(OnClipEvent事件) 加载( Load )载
14、入电影剪辑 导入帧( enterFrame )载入电影剪辑播放任一帧时触发 卸载( unload )卸载电影剪辑时触发 鼠标按下( MouseDown )按下鼠标 鼠标按下( MouseUp )释放鼠标 鼠标移动 ( MouseMove )鼠标拖动 向下键( keyDown )按下键盘任意键 向上键( keyUp )放开键盘任意键 数据( Data ) 载入变量或影片时触发,30,对象的属性,电影剪辑实例的属性 :,电影剪辑属性,_ x对象的X轴坐标 _ y对象的Y轴坐标 _xmouse:鼠标的x坐标 _ymouse:鼠标的y坐标 _ wide对象的宽度 _ height对象的高度 _ rot
15、ation 对象旋转角度 _ target 对象的目标路径 _ name 引用对象的名称,_ xscale 对象X轴方向缩放比例 _ yscale 对象Y轴方向缩放比例 _ currentframes 当前帧位置 _ totalframes 时间线上全部帧数 _ framesloaded 载入进度(返回 百分比值) _ alpha 对象透明度 _ visible 对象是否可见 _ droptarget 是否具有播放属性 _ url对象的URL地址,31,对象的属性,通过电影剪辑实例直接使用 格式: 电影剪辑对象名. 属性名 例: fly . _alpha = 50 / fly是实例名 注意:如
16、果动作脚本与实例不在同一时间轴,必须在实例名前加上路径 例:_root . fly . _alpha = mc / 设置主时间轴中的fly实例的alpha属性_root . mosq . fly . _alpha = 50 / mosq 是 fly 的父剪辑 实例: 影片剪辑的属性,属性控制技巧,32,对象与事件编程,使用属性函数 获取属性函数getproperty : 格式: getproperty( target, propety ) 说明: target :目标对象名 propety:属性名:,属性控制技巧,33,对象与事件编程,属性控制技巧,属性设置函数setproperty : 功能
17、:在播放动画时改变电影剪辑实例的属性。 语法: setproperty( 目标, 属性, 值 ) 参数: 属性:要改变的属性名称 目标:要改变属性的实例名 值:要设置的属性的值 实例: 用按钮控制动画属性。,34,对象与事件编程,播放动画时利用Tell Target命令可以调出并控制电影剪辑实例的播放。 面板分类: “否决的”“动作” Tell Target 参数: 目标:电影剪辑的名称 实例一:随机算命 实例二:音乐开关,设置目标电影剪辑,35,对象与事件编程,复制电影剪辑: duplicateMovieClip( Target, New Name, Depth )Target.duplic
18、ateMovieClip( New Name, Depth ) 参数: Target:被复制电影剪辑实例的名字 New Name:复制好的新电影剪辑的名字 Depth:新电影剪辑的层次 说明:动画对象重叠时根据层次决定叠放次序,0层为最底层,同一层的新对象将替换旧对象。,复制与删除电影剪辑,36,对象与事件编程,删除复制电影剪辑 removeMovieClip( Target) 参数:Target:被删除电影剪辑实例的名字 注意: 原始电影剪辑不会被本命令删除。 动态产生的电影剪辑不能直接操作属性,需要使用setproperty 和 getproperty函数 实例 复制影片剪辑 雪花飘舞,复
19、制与删除电影剪辑,37,对象与事件编程,电影剪辑有关函数 hitTest( target, x, y ):检查是否有电影剪辑与当前剪辑交叉 TargetPath( MovieClip):返回指定电影剪辑目标路径,电影剪辑对象,38,内建对象,内建对象的使用,内建对象是FLASH事先定义的对象 常用对象: Array:数组对象 math:数学对象 date:日期时间对象 sound:声音对象 Funtion:函数对象 MovieClip:电影剪辑对象 Key:键盘对象 Mouse:鼠标对象 Button:按钮对象 TextField:文本对象 String:字符串对象,39,内建对象,内建对象的
20、使用,内建对象的使用 顶级对象直接使用 例:x = math . sqrt( y ) +5; Math, Mouse, Key 等为顶级对象 一般对象先创建对象实例,再引用对象方法 创建格式: 实例对象名 new 内建对象名( ) 例:CDate = new Date( ) 引用方法 实例对象名 . 方法名 例:x = CDate . getYear( ) 实例: Math对象的使用 显示当前日期时间,40,数组,和一般高级语言一样ActionScript提供数组来成批处理相同属性数据 数组是内置对象ARRAY 特点: 数组不要求所有元素类型一致 数组元素下标必须为整数,可以使用变量和表达式
21、数组分为一维、二维和多维数组,41,数组,定义格式: 格式一:数组名 = new A( n ); 例:a = new Array( 4 ); 格式二: 数组名 = n ; 例:var a = 4 ; for ( var i = 0; i = 4; i+ ) a i = i; 说明: n为数组元素最大下标,下标从0开始 n 可以省略成为可变大小数组 例:b = new Array( ); new 亦可省略 例:var x = Array( 5 );,一维数组,42,数组,初始化: 格式: var 数组名 = new A( 初值列表 ) 或 var 数组名 = new A 初值列表 例: var
22、a = new Array( 1001,1002,1003,1004);var b = Array “Mon“,“Tue“,“Wed“,“Thu“,“Fri“ ; 将字符串转换为数组 格式: 字符变量名.split( 指定分隔字符 )例: str = “80, 90, 88, 70, 95, 100“; list = new Array( ); list = str.split( “,“ ); list结果为: 80, 90, 88, 70, 95, 100 ,一维数组,43,数组,定义: 方法一:直接初始化 例1:var a = new Array 2,8,4,7,6,5 ; a 为3行3列
23、二维数组 例2:var b = Array ( 2,8,4,7,6,5 , 1,2,3,4,5,6 ); b 为 232 的三维数组 方法二:分层定义 例1:定义一个5行4列二维数组 var b = new Array( 5 ); for ( var i = 0; i = 5 ; i+ ) b i = new Array( 4 );,多维数组,44,数组,定义: 方法三:利用串行合并,即将已定义的一维数组组合成多维数组 例: var a0 = Array ( 1, 0, 0, 0 ); var a1 = Array ( 0, 1, 0, 0 ); var a2 = Array ( 0, 0,
24、1, 0 ); var a3 = Array ( 0, 0, 0, 1 ); var tab = a0, a1, a2, a3 ; tab 为4行4列二维数组 说明:组成二维数组的一维数组大小可不一致,多维数组,45,数组,Array对象有属于自己的一组方法,用于对数组进行特殊处理: 使用格式数组名 . 方法名(参数) 常用方法 concat ( 数组名 ):数组连接 例:设 x1 = new Array ( “a“,“b“,“c“ );x2 = new Array ( 1, 2, 3 ); x3 = x1 . concat ( x2 );结果x3为: “a“,“b“,“c“, 1, 2, 3
25、 join ( ):将数组转换为字符串 例:x3 = x1 . join( ); 结果x3为: “a,b,c“,数组方法,46,数组,常用方法 length( ):计算数组或字符串长度 例: len = x1.length; 结果len为:3 pop( ):删除最后的元素,并返回删除的元素 例:x3 = x1.pop; 结果为:x1:a, b,x3:c shift( ):删除第一个元素 例:x3 = x1.shift; 结果为:x1: b,c,x3:a sort( ):数组排序,无返回值 例:x1 = Array( 3, 1, 2, 4 ); x1.sort( ); 结果为:x1:1, 2,
26、3, 4 slice( 开始位置,结束位置):取出指定范围元素 例:x3 = x1 . slice( 2,3 ); 结果x3为: “b,c“,数组方法,47,数组,常用方法 push( 元素列表):将列表中元素加到最后,并返回数组长度 例:x3 = x1.push(“d“,“e“); 结果为:x1: a, b, c, d, e,x3:5 unshift(元素列表):将列表中元素加到开头并返回数组长度 例:x3 = x1.unshift(“d“,“e“); 结果为:x1: d, e, a, b, c ,x3:5 reverse( ):反转数组的次序 例:x1 = Array( 3, 1, 2, 4 ); x1.reverse( ); 结果为:x1:4, 2, 1, 3,数组方法,48,数组,实例:由英文查找对应中文 var list = ( “apple“, “苹果“, “grape“, “葡萄“, “orange“,“柳橙“, “banana“, “香蕉“ ); var cstr = “无此数据“; var c = list . length; for ( i = 0; i c; i+ )if ( listi0 =name ) cstr = listi1;break;,数组方法实例,