求教,ugui button 碰撞区域域的显示框在场景0,0位置为什么

Flash&5&ActionScript交互动画简明教程
&ActionScript是Flash
5的动作脚本语言。我们在网上经常见到的Flash动画有两种:简单动画和交互动画,在简单动画中,Flash按顺序播放动画中的场景和帧,用户只能“被动”观看;而在交互动画中,用户可以“主动”观看,可以使用键盘或鼠标与动画交互,这就大大增强了Flash动画的魅力。有了ActionScript,我们能创作出这种复杂的交互动画。
  一、Flash 5
ActionScript语言基础
  &&&&(一)变量和数据类型
  &&&&变量是存储数据的容器,数据类型说明一个变量或ActionScript元素可以存储数据的种类。由于变量可以存储不同的数据,所以变量也同样要区分不同的类型。
  &&&&1.变量
  &&& 在Flash
5中,变量可以存储数值型、字符型、逻辑型、对象型和电影剪辑型数据。在脚本中可以给变量赋值,依据其存储的值的不同,变量可以有以下6种类型:
(1)字符型(String):存储字符型数据。例如,name = &P孙悟空&P。
(2)数值型(Number):存储数值型数据。例如,size = 100。
(3)逻辑型(Boolean):存储逻辑型数据。例如,rainning = true。
(4)对象型(Object):存储对象型数据。例如,myDate = new Date()。
(5)电影剪辑型(Movieclip) :存储电影剪辑型数据。例如,myClip = FishMovieclip。
(6)未定义型(Undefined):当一个变量没有赋予任何值时为未定义型。
在Flash中,给变量命名必须遵守以下规则:
①变量名必须以字母或下划线开头,由字母、数字和下划线组成,中间不能包含空格。变量名不区分大小写。
②变量名不能是一个关键字或逻辑常量(true
或false)。需要注意的是,Flash的关键字都是小写形式,如果写成大写,Flash把它视为普通字符而不作为关键字处理。例如for是一个关键字,而FOR则不属于关键字。
③变量名在它的作用范围内必须是唯一的。
例如,BOOK、a2、firstName、_YPOSITION都是合法的变量名;if、for、var、3W、gb%c都是非法变量名。
在脚本中使用变量应遵循“先定义后使用”的原则。也就是说,在脚本中必须先定义一个变量,然后才能在表达式中使用这个变量。依据变量的作用范围,可以把变量分为全局变量和局部变量。两种变量的定义方法不同。
定义全局变量,可以使用set动作或赋值操作符(=) ,两个方法的结果相同。语法格式如下:
变量名 = 表达式;
set (变量名,表达式);
  &&& 例如:
set(&PA1&P,20);
可以在定义变量时给变量赋值。在上例中,在定义变量A1时给它赋值20。注意:set语句中的变量名要用引号(双引号或单引号)括起来。
定义局部变量使用var语句。语法格式如下:
var 变量名;
var 变量名 = 表达式;
  &&& 例如:
var book = &PActionScript&P;
  &&&&<font COLOR="#.数据类型
  &&& Flash
5的数据有数值型、字符型、逻辑型、对象型和电影剪辑型。
  &&& (1)
字符型数据是一个字符(字母、数字和标点符号)序列。在ActionScript语句中输入字符串,使用单引号或双引号括住。
Name = &PTed&P;
(2)数值型
数值型数据是一个双精度浮点数。可用数学运算符处理数值型数据。例如:
sum = 300+200;
(3)逻辑型
逻辑型数据包括true(真)或false(假)。需要时,ActionScript
也把true和false转换为1和0。逻辑值与逻辑操作符一起,常常用在控制脚本流动的比较语句中。例如在下面的脚本中,如果password的值为true,动画播放:
onClipEvent(enterFrame) {
  &&&&&&
if (password == true){
  &&&&&&&&
  &&&&&&
对象是属性的集合。每个属性都有名字和值。属性值可以是任何Flash数据类型,甚至可以是对象数据类型。这样就可以把一个对象嵌套在另一个对象之中。例如,在下面的代码中,china是一个对象,guangxi也是一个对象;而nanning是guangxi的属性,guangxi又是china的属性:
china.guangxi.nanning
(5)电影剪辑
电影剪辑是一种图符,这种图符可以在Flas动画中播放一个动画片段。它是唯一一种与图像元素有关的数据类型。你也可以把电影剪辑理解为一个“小型动画”。有了电影剪辑数据类型,我们就可以使用电影剪辑对象的方法控制电影剪辑图符。使用点操作符可以调用电影剪辑的方法,例如:
myClip.startDrag(true);
  &&&&(二)运算符和表达式
  &&& 在Flash
5中,运算符有很多种类,包括数值运算符、字符串运算符、比较运算符、逻辑运算符、相等运算符、赋值运算符、
点运算符、数组访问运算符和位运算符。
  &&&&1.数值运算符
数值运算符就是对数值执行加、减、乘、除和其他算术运算。动作脚本语言中的数值运算符包括+(加)、-(减)、*(乘)、/(除)、%(取模)等。
需要注意的是,在Flash的ActionScript中,如果减、乘和除数值运算符的操作数中有一个是数字字符串,Flash会自动把该数字字符串转换为数值,然后执行相应的运算。例如:
y = &P12&P - 6;& //结果y = 6
y = &P05&P * 6;& //结果y = 30
  &&&&2.比较运算符
比较运算符比较表达式的值,返回逻辑值true或false。比较运算符常常用在循环和条件语句之中。动作脚本语言中的比较运算符包括==(等于)、!=(不等)、&(小于)、&(大于)
  &=(小于等于)、&=(大于等于)等。
  &&&&3.逻辑运算符
逻辑运算符比较两个逻辑值(true和false),返回结果也是逻辑值。ActionScript的逻辑运算符包括&&(逻辑与)、||(逻辑或)、!(逻辑非)等。
在逻辑运算中,如果两个操作数的计算结果都是true,则逻辑与运算的返回结果为true;如果两个操作数的计算结果有一个是false,则逻辑与运算的返回结果为false。如果一个或两个操作数的运算结果是true,逻辑或运算的返回结果为true;如果两个操作数的计算结果都是false,则逻辑或运算的返回结果为false。如果操作数的计算结果是true,逻辑非运算的返回结果就是false;如果操作数的计算结果是false,逻辑非运算的返回结果就是true。
  &&&&<font COLOR="#.位运算符
位运算符用来处理浮点数,运算时先将操作数转化为32位的二进制数,然后对每个操作数分别按位进行运算,运算后再将二进制的结果按照Flash的数值类型返回运算结果。
ActionScript的位运算符包括
&(位与)、|(位或)、^(位异或)、~(位非)、&&(左移位)、&&(右移位)、&&&(填0右移位)等。
  &&&&<font COLOR="#.赋值运算符
赋值运算符的作用就是给变量、数组元素或对象的属性赋值。下表列出的是ActionScript的赋值运算符:
  &&&&6.表达式
Flash表达式是由常量、变量、函数、属性和运算符按照运算规则组合构成的式子。表达式的结果作为参数值出现在动作脚本语句中,是语句的重要组成部分。按照运算符和运算结果的不同,Flash表达式可以分为算术表达式、字符串表达式、关系表达式和逻辑表达式4种。例如:
  &&& 算术表达式:3 +
字符串表达式:year + &P年&P + month + day + &P日&P
  &&&&(三)ActionScript的基本语法规则
像其他脚本语言一样,ActionScript也有它自己的语法规则。ActionScript允许用户创建自己的对象和函数。
  &&&&1.点语法
在ActionScript中,点(.)被用来指明与某个对象或电影剪辑相关的属性和方法。它也用于标识指向电影剪辑或变量的目标路径。点语法表达式由对象或电影剪辑名开始,接着是一个点,最后是要指定的属性、方法或变量。例如:
myDate.getDate();//调用对象myDate的getDate()方法
_Xposition = tmpBomb._x&
//表达式tmpBomb._x指定电影剪辑实例tmpBomb的_X属性
fish.play(); //调用电影剪辑实例fish的play()方法
fish.color = &Pred&P&&
//设置电影剪辑实例fish的颜色属性
点语法使用两个特殊的别名:_root和_parent。别名_root是指主时间轴。可以使用_root别名创建一个绝对路径。例如,下面的语句调用主时间轴中电影剪辑fish的play()方法:
_root.fish.play();
  &&& Flash
5允许使用别名_parent来引用嵌套当前电影剪辑的电影剪辑(即父电影剪辑)。也可以用_parent创建一个相对目标路径。例如,如果电影剪辑dog被嵌套在电影剪辑animal之中,那么,在实例dog上的下列语句告诉animal电影剪辑停止播放:
  &&&&&&
_parent.stop();
  &&&&2.大括号
ActionScript语句用大括号({ })分块,如下面的脚本所示:
on (release) {
  &&&&&&&
myDate = new Date();
  &&&&&&&
currentMonth = myDate.getMonth();
  &&&&3.分号
ActionScript语句用分号(;)结束,但如果你省略语句结尾的分号,Flash仍然可以成功地编译你的脚本。
  &&&&4.圆括号
定义一个函数时,要把参数放在圆括号中:
function myFunction (name, age, reader){
  &&&&&&&&&
调用一个函数时,也要把要传递的参数放在圆括号中:
myFunction (&PSteve&P, 10, true);
圆括号也可以用来改变ActionScript的运算优先级,或使自己编写的ActionScript语句更容易阅读。
  &&&&5.字母的大小写
在ActionScript中,只有关键字区分大小写。对于其余的ActionScript元素,可以使用大写或小写字母。例如,下面的语句是等价的:
cat.hilite =
CAT.hilite =
但是,遵守一致的大小写约定是一个好的习惯。这样,在阅读ActionScript代码时更易于区分函数和变量的名字。
  &&&&6.注释
添加注释有助于别人对你编写的脚本的理解。注释语句用“//”开始。
  &&&&7.关键字
ActionScript保留一些单词,专用与本语言之中。因此,不能用这些保留字作为变量、函数或标签的名字。下表列出了ActionScript中所有的关键字:
注意:这些关键字都是小写形式,不能写成大写形式。
  &&&&(五)控制语句
控制结构在程序设计中占有相当重要的地位,通过控制结构可以控制动作脚本的流向,完成不同的任务。控制结构包括条件判断控制结构和循环执行控制结构。
1.条件判断语句
条件判断结构在程序中用于条件判断,根据条件判断结果执行不同的动作。在Flash动作脚本语言中,使用if语句实现条件判断结构。If语句称为条件语句或“逻辑分支”。根据分支的多少,我们可以把if语句分为单分支条件判断结构和两分支条件判断结构。
(1)单分支条件判断语句
单分支条件判断语句的语法格式如下:
if(condition) {
  &&&&&&&
当条件(condition)成立时,执行{}内的语句块(statements)。语句块可以是一到多个语句。例如:
if (X&0) {
  &&&&&&&
fish.play();
在上面的条件判断结构中,x&0是条件。当x&0的条件成立(true)时,执行结构内的语句fish.play();当x&0的条件不成立(false)时什么也不做。
(2)两分支条件判断语句
两分支条件判断语句的语法格式如下:
if(condition) {
  &&&&&&&
statement1;
  &&& }else
  &&&&&&&
statement2;
当条件成立时,执行if后面的语句块{statement1};当条件不成立时,执行{statement2}。例如:
if ((year%4 == 0) &&
(year0&&0) || (year@0 == 0)) {
  &&&&&&&
leap = year+&P是闰年&P;
  &&&&&&&
leap = year+&P不是闰年&P;
上述两分支判断结构判断年份(year)“能被4整除且不能被100整除”或年份“能被400整除”两个条件。如果两个条件中有一个条件成立,则执行if后面的语句:leap
= year+&P是闰年&P;如果两个条件都不成立,则执行else后面的语句:leap = year+&P不是闰年&P。
2.循环控制结构
循环是指对同一段脚本代码重复执行若干次。被重复执行的代码块称为循环体。
(1)while循环
while循环分为两种,一种是先判断条件是否满足,如果条件满足则执行循环体内的代码块,然后继续判断条件是否满足,直至条件不满足为止;另一种是先执行一次循环体内的代码块,才判断条件是否满足,如果满足则继续重复执行代码块,直至条件不满足为止。
在Flash动作脚本语言中while循环有以下两种语法格式:
while(condition) {
  &&&&&&&
statement(s);
  &&&&&&&
statement(s);
} while (condition);
while语句是先判断后执行型,使用时应注意,格式中的条件可以是关系表达式或逻辑表达式,也可以是常数(非零视为true,零视为false);语句块由若干语句组成;while循环是先测试型,有可能一次也不执行循环体;编写脚本时一定要注意,务必使循环条件最终变为false,否则会成为死循环。
(2)for循环
for循环是Flash动作脚本语言中另一种形式的控制结构。在for循环中,循环变量的初值、循环条件和循环变量的增量均写在一起,结构更清晰,使用更方便。
For循环的语法格式如下:
for( next) {
  &&&&&&&
格式中的init用于给循环变量赋初值;condition是循环条件;next是循环增量。例如,要实现从1累加到10,可以用下面的代码实现:
var s = 0;
for (I=1; I&=10; I++){
  &&&&&&&
在for循环中,循环变量I从1变到10,每次循环I增加1,直到I&10为止,共进行了10次循环。在循环中实现将I累加到变量S中,结果S=1+2+……+10。
For循环与while循环一样,也是属于先判定后执行型。因此,如果一开始循环条件就不满足,循环内的代码块一次也不会执行。
(3)for…in循环
  &&& Flash
5的动作脚本语言是一种面向对象的编程语言。For…in循环是一种特殊的循环,它应用于对象,其作用是对对象的每个属性或数组的每个元素进行循环处理。
For…in循环的语法格式如下:
for(variableiterant in object){
  &&&&&&&
statement(s);
语法格式中的变量(variableiterant)可以是任意合法的变量名;对象(object)可以是数组对象或其他对象,如日期对象、电影剪辑对象等等。
For…in循环的执行过程:首先取指定对象的第1个属性,并把属性名作为字符串存入变量中,然后对该属性执行代码块中指定的动作。对第1个属性处理完毕后,进入第2次循环,对第2个属性进行处理,依此类推,直至对指定对象的所有属性处理完毕。对数组元素的处理与此类同。For…in循环不需要显式指定循环控制变量来控制循环,因为循环次数是由指定对象的属性个数决定的。
  &&&&(六)函数与对象
函数是每一种编程语言的基本组成部分。Flash
5的脚本语言也提供了一些常用的函数。可以把函数分为预定义函数(系统函数)和自定义函数。预定义函数是Flash系统提供的函数,可以直接调用。Flash
5允许用户根据自己的需要定义自己的函数,称为自定义函数。自定义函数用function动作定义。在自定义函数中,用户定义一系列语句,对传递过来的值进行运算,最后返回运算结果。
对象是面向对象编程语言的重要语言元素。对象一般都封装了一些属性和方法。通过读取或设置对象的属性,调用对象的方法,可以减少编程工作量,提高编程效率,轻松实现我们想要完成的任务。
  &&&&1.函数
函数功能:截取指定数值的整数部分。
语法格式:int(value)
应用举例:k1=int(2.3)
说明:参数value是一个要截取整数部分的数值、数值型变量或函数。
(2)number
函数功能:把指定的参数转换成数值。
语法格式:number(expression)
应用举例:N1=number("2001")
说明:参数expression可以是字符表达式、逻辑表达式或其它可以转换为数值的表达式。
(3)random
函数功能:产生0到指定整数之间的随机整数。
语法格式:random(value)
应用举例:b=random(10)
说明:参数value用来指定产生的随机整数的上限,下限是0。
(4)isFinite
函数功能:测试数值是否为有限数。
语法格式:isFinite(expression)
应用举例:f=isFinite(13/5e-1000000)
说明:参数expression可以是一个逻辑值、变量或其他表达式。函数的返回值是一个逻辑值。
(5)isNaN
函数功能:测试指定的参数是否为非数值。
语法格式:isNaN(expression)&
应用举例:b=isNaN("2001")
说明:函数中的参数expression可以是一个逻辑值、变量或其他表达式。函数的返回值是一个逻辑值。
(6)parseFloat
函数功能:把字符串转换成浮点数。
语法格式:parseFloat(string)
应用举例:x=parseFloat("日")
说明:参数string是一个字符串。
(7)parseInt
函数功能:把字符串转换成整数。
语法格式:parseInt(expression, radix)
应用举例:b=parseInt("3.5")&
说明:函数中的参数expression可以是字符串、浮点数或其它表达式;参数radix可选,表示数的进制,有效取值范围在2-36之间。
(8)string
函数功能:把指定参数转换成字符串。
语法格式:string(expression)
应用举例:c=string(12345)
说明:函数中的参数expression可以是数值、逻辑值、变量或对象。
函数功能:计算表达式的值。
语法格式:eval(expression)
  &&& 应用举例:x =
eval("a")&&&&
//a是变量名
说明:参数expression代表字符串表达式,可以是变量名、属性名、对象名或电影剪辑名。
(10)getProperty
函数功能:读取电影剪辑实例指定属性的值。
语法格式:getProperty(instancename, property)
  &&& 应用举例:manX
= getProperty("_root.man", _x)
说明:参数instancename是电影剪辑实例名,property是电影剪辑实例的属性。
(11)getTimer
函数功能:返回动画开始播至现时的时间,单位是毫秒。
语法格式:getTimer()
应用举例:T1=getTimer()
说明:本函数为无参函数。
(12)getVersion
函数功能:返回Flash播放器版本号和运行平台的信息。
语法格式:getVersion()
应用举例:version=getVersion()
说明:本函数为无参函数。
  &&&&2.属性
  &&& 在Flash
5 ActionScript中,我们把物体称为对象,把物体的基本特征称为对象的属性。属性具有具体的值。Flash 5
ActionScript定义了以下一些系统属性。
  &&& (1)
作用:设置或返回电影剪辑实例的Alpha透明度。
应用举例:fly._alpha= 80
说明:取值范围是0-100,0表示全透明,100表示完全不透明。
  &&& (2)
_height和_width
作用:设置或返回电影剪辑实例的高度和宽度,单位为像素(px)。
应用举例:fish._height = 100
说明:设置_height和_width属性,可以改变电影剪辑实例的大小。
  &&& (3)
作用:返回或改变电影剪辑实例名。
应用举例:fish._name = "bigfish"
说明:可以用_name属性读取或更改实例名。
  &&& (4)
作用:返回或设置电影剪辑旋转的角度。
应用举例:_rotation = random(360)
说明:设置值以度为单位。
  &&& (5)
作用:设置或返回电影剪辑实例的可见性。
应用举例:plane._visible = false
说明:它的取值是逻辑值true或false。设为false时,电影剪辑不可见。
  &&& (6)
作用:设置或返回电影剪辑实例位于父电影剪辑坐标系中的x和y坐标。
应用举例:spider_x = _root.web.spider._x
说明:如果一个电影剪辑实例位于主时间轴中,那么该电影剪辑实例的坐标系就以编辑区左上角作为坐标原点(0,0)。如果一个电影剪辑包含在另一个电影剪辑之中,那么该电影剪辑就位于父电影剪辑的坐标系中。父电影剪辑的坐标系以注册点为坐标圆点(0,0)。
  &&& (7)
_xscale和_yscale
作用:设置或返回电影剪辑水平或垂直方向的缩放比例,以百分数表示。
应用举例:_root.web.spider._yscale = 200
说明:设置电影剪辑实例的_xscale和_yscale属性,可以按比例放大或缩小剪辑实例。电影剪辑实例的_xscale和_yscale属性的默认值为100,注册点的默认值为0。
  &&& (8)
_currentframe
作用:返回正在播放的时间轴的当前帧号,或者说播放头所在帧的帧号。
  &&& 应用举例:cf =
_root.myInstance._currentframe
说明:这个属性的值随着播放头的移动而变化。
  &&& (9)
作用:返回下载动画文件的URL。
应用举例:movieclipurl = _root.web.spider._url
说明:读取_url属性值的方法是在属性前加上电影剪辑实例的路径。
  &&& (10)
_framesloaded
作用:返回已载入的帧数。
应用举例:frameloaded = _root.web.spider._
说明:读取这个属性的方法是在属性前面添加实例名及其路径。
  &&& (11)
_totalframes
作用:返回指定动画或剪辑实例的总帧数。
应用举例:totalframes = _root.web.spider._
说明:读取这个属性的方法是在属性前面添加实例名及其路径。
  &&& (12)
_xmouse和_ymouse
作用:返回鼠标指针的x坐标和y坐标。
应用举例:xmouse = _root._xmouse
说明:使用这两个属性可以获取动画中鼠标指针的位置。
&&&&&&&3.对象
对象是面向对象编程语言的重要语言元素。对象一般都封装了一些属性和方法。通过读取或设置对象的属性,调用对象的方法,可以减少
  编程工作量,提高编程效率,轻松实现我们想要完成的任务。Flash的预定义对象如下表所列。
  &&&&&&&&&&
对象&&&&&&&&
  &&&&&&
----------& -------------------------
  &&&&&&&&&
Object&&&&&&
Object对象
  &&&&&&&&&
Number&&&&&&
  &&&&&&&&&
String&&&&&&
字符串对象
  &&&&&&&&&
Boolean&&&&&
  &&&&&&&&&
Math&&&&&&&&
  &&&&&&&&&
Array&&&&&&&
  &&&&&&&&&
Date&&&&&&&&
  &&&&&&&&&
Color&&&&&&&
  &&&&&&&&&
Key&&&&&&&&&
  &&&&&&&&&
Selection&&&
  &&&&&&&&&
Sound&&&&&&&
  &&&&&&&&&
MovieClip&&&
电影剪辑对象
  &&&&&&&&&
XML&&&&&&&&&
可扩展标记语言对象
  &&&&&&&&&
XMLSocket&&&
XML端口对象
  &&&&&&
--------------------------------------
下面简要介绍其中一些对象的属性和方法。
  &&& (1)
Math(数学对象)&
数学对象的作用是提供一些数学常数(如圆周率、2的平方根等等)和一些常用的数学函数,在编写脚本时可以随时调用。数学对象的属性
  和方法如下表所列。
  &&&&&&&&
属性和方法&&&&&&&&&&&&&&&&
  &&&&&&&
------------&
-------------------------------------------------
  &&&&&&&&&
E&&&&&&&&&&
自然对数的底数,其值约为2.71828
  &&&&&&&&&
LN2&&&&&&&&
以e为底2的自然对数,其值约为0.45286
  &&&&&&&&&
LN10&&&&&&&
以10为底的自然对数,其值约为2.04590
  &&&&&&&&&
LOG10E&&&&&
以10为底e的对数,其值约为0.
  &&&&&&&&&
LOG2E&&&&&&
以2为底e的对数,值约为1.963387
  &&&&&&&&&
PI&&&&&&&&&
圆周率,其值约为3.79
  &&&&&&&&&
SQRT1_2&&&&
1/2的平方根,其值约为0.
  &&&&&&&&&
SQRT2&&&&&&
2的平方根,其值约为1..
  &&&&&&&&&
Sin&&&&&&&&
  &&&&&&&&&
asin&&&&&&&
求反正弦值
  &&&&&&&&&
cos&&&&&&&&
  &&&&&&&&&
acos&&&&&&&
  &&&&&&&&&
tan&&&&&&&&
  &&&&&&&&&
atan&&&&&&&
  &&&&&&&&&
atan2&&&&&&
求Y/X弧度值的反正切值
  &&&&&&&&&
abs&&&&&&&&
  &&&&&&&&&
random&&&&&
产生0-1之间的随机数
  &&&&&&&&&
sqrt&&&&&&&
求根号2的值
  &&&&&&&&&
log&&&&&&&&
求自然对数
  &&&&&&&&&
exp&&&&&&&&
  &&&&&&&&&
ceil&&&&&&&
求数的上限整数
  &&&&&&&&&
floor&&&&&&
求下限整数
  &&&&&&&&&
round&&&&&&
求四舍五入
  &&&&&&&&&
max&&&&&&&&
  &&&&&&&&&
min&&&&&&&&
  &&&&&&&&&
pow&&&&&&&&
求x的y次方
数学对象的属性都是一些常用的数学常数,它的方法都是一些常用的数学函数,包括三角函数、常用对数、自然对数、随机函数等等。
  &&& (2)
我们可以把相同性质的一组数据存入一个数组对象中,便于利用数组对象的各种属性和方法,以及循环控制对这组数据进行处理。
使用数组对象的属性和方法可以访问和处理数组中的数据,包括增加、删除数组元素,对数组元素进行排序等操作。数组对象的属性和方法如下表所列。
  &&&&&&&&&&&
方法&&&&&&&&&&&&&
  &&&&&&&
-----------&&
-------------------------------------------
  &&&&&&&&&
length&&&&&
返回数组的长度
  &&&&&&&&&
concat&&&&&
把指定参数连接起来组成一个新数组
  &&&&&&&&&
join&&&&&&&
把数组中所有的元素连接起来生成一个字符串
  &&&&&&&&&
pop&&&&&&&&
删除并返回数组的最后一个元素
  &&&&&&&&&
push&&&&&&&
把一个或更多元素添加到数组尾部
  &&&&&&&&&
reverse&&&&
倒置数组中的元素
  &&&&&&&&&
shift&&&&&&
删除数组的第一个元素,并返回该元素的值
  &&&&&&&&&
slice&&&&&&
取指定数组的部分元素组成一个新的数组
  &&&&&&&&&
sort&&&&&&&
对数组元素排序
  &&&&&&&&&
splice&&&&&
增加或删除数组中的元素
  &&&&&&&&&
toString&&&
返回由所有数组元素的值组成的字符串
  &&&&&&&&&
unshift&&&&
在数组前面插入一个或多个元素
  &&& (3)
日期对象的作用是对访问系统日期和时间,并可对日期对象的日期和时间执行设置、转换等各种操作。日期对象共有37个方法,可以对日期和时间进行各种操作,如下表所列。
  &&&&&&&&&&&
方法&&&&&&&&&&&&&
  &&&&&&&
------------------&&
-------------------------------------------------------------
  &&&&&&&
getDate&&&&&&&&&&&&&
根据本地时间返回指定日期对象本月的第几天(1-31)&
  &&&&&&&
getDay&&&&&&&&&&&&&&
根据本地时间返回指定日期对象的周日(0-星期日,1-星期一…)&
  &&&&&&&
getFullYear&&&&&&&&&
根据本地时间返回指定日期对象的四位数年份&
  &&&&&&&
getHours&&&&&&&&&&&&
根据本地时间返回指定日期对象的小时数&
  &&&&&&&
getMilliseconds&&&&&
根据本地时间返回指定日期对象的毫秒数&
  &&&&&&&
getMinutes&&&&&&&&&&
根据本地时间返回指定日期对象的分钟数&
  &&&&&&&
getMonth&&&&&&&&&&&&
根据本地时间返回指定日期对象的月份&
  &&&&&&&
getSeconds&&&&&&&&&&
根据本地时间返回指定日期对象的秒数&
  &&&&&&&
getTime&&&&&&&&&&&&&
返回指定日期对象自日午夜以来的毫秒数(世界时)&
  &&&&&&&
getTimezoneOffset&&&
返回计算机本地时间与世界时之间的时差(以分为单位)&
  &&&&&&&
getUTCDate&&&&&&&&&&
根据世界时返回指定日期对象本月的第几天(1-31)&
  &&&&&&&
getUTCDay&&&&&&&&&&&
根据世界时返回指定日期对象的周日(0-星期日,1-星期一…)&&
  &&&&&&&
getUTCFullYear&&&&&&
根据世界时返回指定日期对象的四位数年份&
  &&&&&&&
getUTCHours&&&&&&&&&
根据世界时返回指定日期对象的小时数&
  &&&&&&&
getUTCMilliseconds&&
根据世界时返回指定日期对象的毫秒数&
  &&&&&&&
getUTCMinutes&&&&&&&
根据世界时返回指定日期对象的分钟数&
  &&&&&&&
getUTCMonth&&&&&&&&&
根据世界时返回指定日期对象的月份&
  &&&&&&&
getUTCSeconds&&&&&&&
根据世界时返回指定日期对象的秒数&
  &&&&&&&
getYear&&&&&&&&&&&&&
根据本地时间返回指定日期对象的年份&
  &&&&&&&
setDate&&&&&&&&&&&&&
根据本地时间设置指定日期对象本月的第几天
  &&&&&&&
setFullYear&&&&&&&&&
根据本地时间设置日期对象的四位数年份&
  &&&&&&&
setHours&&&&&&&&&&&&
根据本地时间设置日期对象的小时数&
  &&&&&&&
setMilliseconds&&&&&
根据本地时间设置日期对象的毫秒数&
  &&&&&&&
setMinutes&&&&&&&&&&
根据本地时间设置日期对象的分钟数&
  &&&&&&&
setMonth&&&&&&&&&&&&
根据本地时间设置日期对象的月份&
  &&&&&&&
setSeconds&&&&&&&&&&
根据本地时间设置日期对象的秒数&
  &&&&&&&
setTime&&&&&&&&&&&&&
用毫秒数设置指定日期对象的日期&
  &&&&&&&
setUTCDate&&&&&&&&&&
根据世界时设置指定日期对象的日期&
  &&&&&&&
setUTCFullYear&&&&&&
根据世界时设置指定日期对象的四位数年份&
  &&&&&&&
setUTCHours&&&&&&&&&
根据世界时设置指定日期对象的小时数&
  &&&&&&&
setUTCMilliseconds&&
根据世界时设置指定日期对象的毫秒数&
  &&&&&&&
setUTCMinutes&&&&&&&
根据世界时设置指定日期对象的分钟数&
  &&&&&&&
setUTCMonth&&&&&&&&&
根据世界时设置指定日期对象代表的月份&
  &&&&&&&
setUTCSeconds&&&&&&&
根据世界时设置指定日期对象的秒数&
  &&&&&&&
setYear&&&&&&&&&&&&&
根据本地时间设置指定日期对象的年份&
  &&&&&&&
toString&&&&&&&&&&&&
返回代表指定日期对象中存储的日期和时间的字符串值&
  &&&&&&&
Date.UTC&&&&&&&&&&&&
返回日午夜与指定时间之间的毫秒数(世界时)&
  &&& (4)
通过颜色对象,可以在动作脚本中操纵电影剪辑的颜色,包括读取、设置和变换颜色等操作,使电影剪辑实例的颜色丰富多彩。颜色对象有4个方法,调用这些方法读取和设置颜色,如下表所列。
  &&&&&&&&&&
方法&&&&&&&&&&&&&
  &&&&&&&
--------------&&
---------------------------------------------------
  &&&&&&&&
setRGB&&&&&&&&&
设置颜色对象的RGB颜色
  &&&&&&&&
getRGB&&&&&&&&&
返回最近一次调用setRGB方法设置的RGB值
  &&&&&&&&
setTransform&&&
设置颜色对象的颜色变换
  &&&&&&&&
getTransform&&&
返回setTransform方法最后一次设置的变换信息
  &&& (5)
使用按键对象可以捕获用户的按键。按键对象的属性和方法如下表所列。
  &&&&&&&&
属性和方法&&&&&&&&&
  &&&&&&&
-------------&&
------------------------------------
  &&&&&&&&&
BACKSPACE&&&&
返回退格键键码(9)
  &&&&&&&&&
CAPSLOCK&&&&&
返回Caps Lock键键码(20)
  &&&&&&&&&
CONTROL&&&&&&
返回Ctrl键键码(17)
  &&&&&&&&&
DELETEKEY&&&&
返回Delete键键码(46)
  &&&&&&&&&
DOWN&&&&&&&&&
返回下箭头键键码(40)
  &&&&&&&&&
END&&&&&&&&&&
返回End键键码(35)
  &&&&&&&&&
ENTER&&&&&&&&
返回Enter键键码(13)
  &&&&&&&&&
ESCAPE&&&&&&&
返回Esc键键码(27)
  &&&&&&&&&
HOME&&&&&&&&&
返回Home键键码(36)
  &&&&&&&&&
INSERT&&&&&&&
返回Insert键键码(45)
  &&&&&&&&&
LEFT&&&&&&&&&
返回Left键键码(37)
  &&&&&&&&&
PGDN&&&&&&&&&
返回PageDown键键码(34)
  &&&&&&&&&
PGUP&&&&&&&&&
返回PageUp键键码(33)
  &&&&&&&&&
RIGHT&&&&&&&&
返回右箭头键键码(39)
  &&&&&&&&&
SHIFT&&&&&&&&
返回Shift键键码(16)
  &&&&&&&&&
SPACE&&&&&&&&
返回空格键键码(32)
  &&&&&&&&&
TAB&&&&&&&&&&
返回Tab键键码(9)
  &&&&&&&&&
UP&&&&&&&&&&&
返回上箭头键键码(38)
  &&&&&&&&&
getAscii&&&&&
返回最近一次按键的ASCII码
  &&&&&&&&&
getCode&&&&&&
返回最近一次按键的虚拟键码
  &&&&&&&&&
isDown&&&&&&&
判断键码所对应的键是否已按下
  &&&&&&&&&
isToggled&&&&
判断CapsLock或NumLock是否被激活
  &&& (6)
有了声音对象,我们可以在动作脚本中实现动态音效控制,如声音的播放控制、音量控制、左右声道平衡控制等等。掌握声音对象setTransform方法的高级应用,你还可以随心所欲地添加各种有趣的音效。
使用声音对象的方法可以实现对声音的各种控制,包括声音文件的连接、播放控制、音量控制、左右声道平衡控制等等,如下表所列。
  &&&&&&&&&&
方法&&&&&&&&&&&&&&&&&&&&
  &&&&&&&
----------------&
------------------------------------
  &&&&&&&&&
attachSound&&&&
把指定的声音连接到指定的声音实例
  &&&&&&&&&
start&&&&&&&&&&
开始播放声音
  &&&&&&&&&
stop&&&&&&&&&&&
停止播放声音
  &&&&&&&&&
setVolume&&&&&&
设置指定声音对象的音量
  &&&&&&&&&
getVolume&&&&&&
返回声音对象的音量大小(0-100)
  &&&&&&&&&
setPan&&&&&&&&&
设置声音对象的左右声道平衡
  &&&&&&&&&
getPan&&&&&&&&&
返回声音均衡值(从-100到100)
  &&&&&&&&&
setTransform&&&
设置声音对象的转换信息
  &&&&&&&&&
getTransform&&&
返回声音对象的声音转换信息
  &&& (7)
通过电影剪辑对象,我们可以在动作脚本中控制动画中的电影剪辑实例,指令某个电影剪辑播放或停止播放,向时间轴中添加电影剪辑,用动作复制电影剪辑,测试剪辑之间的相互碰撞等等。总之,有了电影剪辑对象就可以设计出复杂多变的,交互性更强的动画作品。
电影剪辑对象拥有22种方法,有些方法的功能与标准动作相同,但也有一些方法是它特有的,如下表所列。
  &&&&&&&&&&
方法&&&&&&&&&&&&&&&&&&&&
  &&&&&&&
--------------------&
-----------------------------------------------------
  &&&&&&&&&
attchMovie&&&&&&&&&
添加电影剪辑到动画中
  &&&&&&&&&
duplicateMovieClip& 复制电影剪辑实例
  &&&&&&&&&
getBounds&&&&&&&&&&
返回指定电影剪辑在目标坐标系中的边界坐标对象
  &&&&&&&&&
getBytesLoaded&&&&&
返回指定电影剪辑对象数据流已下载的字节数
  &&&&&&&&&
getBytesTotal&&&&&&
返回指定电影剪辑的总字节数
  &&&&&&&&&
getURL&&&&&&&&&&&&&
指定要下载文档的URL
  &&&&&&&&&
globalToLocal&&&&&&
把point对象从动画全局坐标转换为剪辑局部坐标
  &&&&&&&&&
gotoAndPlay&&&&&&&&
把播放头移动到指定的帧并开始播放
  &&&&&&&&&
gotoAndStop&&&&&&&&
把播放头移动到指定帧并停止播放
  &&&&&&&&&
hitTest&&&&&&&&&&&&
检测电影剪辑之间或剪辑与点之间的碰撞
  &&&&&&&&&
loadMovie&&&&&&&&&&
在不关闭Flash播放器的情况下载入指定的动画并播放
  &&&&&&&&&
loadVariable&&&&&&&
从外部文件读取数据设置动画中的变量的值
  &&&&&&&&&
localToGlobal&&&&&&
把剪辑局部坐标转换为动画全局坐标
  &&&&&&&&&
nextFrame&&&&&&&&&&
把电影剪辑的播放头移至当前帧的下一帧
  &&&&&&&&&
play&&&&&&&&&&&&&&&
播放指定的电影剪辑
  &&&&&&&&&
PrevFrame&&&&&&&&&&
把剪辑的播放头移至当前帧的前一帧并停止播放
  &&&&&&&&&
removeMovie&&&&&&&&
删除电影剪辑实例
  &&&&&&&&&
startDrag&&&&&&&&&&
使电影剪辑在播放时可以拖动
  &&&&&&&&&
stop&&&&&&&&&&&&&&&
停止当前正在播放的电影剪辑的播放
  &&&&&&&&&
stopDrag&&&&&&&&&&&
停止startDrag方法设置的拖动剪辑操作
  &&&&&&&&&
swapDepths&&&&&&&&&
交换动画中电影剪辑的堆叠顺序
  &&&&&&&&&
unloadMovie&&&&&&&&
卸载loadMovie或attachMovie方法加载的动画
7.载入变量动作:Load Variables
loadVariables动作的作用是载入外部文件并设置变量值。其语法格式如下:
loadVariables (url ,location [,
variables]);
动作中的参数url是载入外部文件的绝对或相对URL。URL中指向的主机必须与下载的Flash动画处在同一子域;location是一个可选的参数,用于指定接收变量的层级或目标。loadVariables动作可以从外部文件,如文本文件或CGI脚本、ASP、PHP生成的文本中载入变量,并在动画或电影剪辑中设置这些变量的值。loadVariables动作还可以用于更新当前正在播放的动画中的变量的值。
例如,一个文本文件data.txt中有下面的内容,定义了4个变量:
company=Macromedia&address=600+Townsend&city=San+Francisco&zip=94103
可以用loadVariables动作把这个文本文件载入动画中:
on(release) {
loadVariables(&Pdata.txt&P, 0);
载入这个文本文件后,在动画中将设置company、address、city和zip四个变量及其取值。
8.定义函数动作:function
在动作脚本语言中,Flash提供了一些函数(如int函数、random函数等),这些函数我们称为预定义函数。然而,Flash提供的函数毕竟有限,往往满足不了编程的要求。因此,Flash允许用户自定义函数。
定义函数的动作是function。它的语法格式如下:
function functionname ([argument0,
argument1,…argumentN]){
statement(s)
具体说,函数定义由以下几部分组成:
function:是函数定义的关键字,表明函数定义的开始。
Functionname:是该函数的名称,调用函数必须通过函数名进行。函数名的命名遵循变量命名规则,一般选用能够代表函数功能的单词或单词组合了命名。
Argument0,
argument1,…argumentN是参数列表,用来给函数传递参数。参数可以是0到多个。如果没有参数,圆括号也不能省略。如果有多个参数,参数与参数之间用逗号分隔。
(4)statement(s)是决定该函数功能的ActionScript语句。Statement(s)放在大括号之间,可以是0到多个语句。
下面是定义一个名为Circle的函数,有一个参数radius(半径):
function Circle(radius) {
this.radius =
this.area = Math.PI * radius *
注:用在函数体内的关键字this是对函数所属电影剪辑的引用。
9.设定电影剪辑属性动作:setProperty
setProperty动作用于设置电影剪辑实例的属性。在播放动画时执行此动作,就会根据设置改变电影剪辑的属性。使用setProperty动作可以设置电影剪辑实例的位置、缩放比例、透明度、可见性、旋转角度等属性。
setProperty动作语法格式如下:
setProperty(target, property,
expression);
动作中的参数说明如下:
* target参数指定要改变属性的电影剪辑实例的路径。
* property参数指定要设置的电影剪辑属性。
* expression参数指定要设置属性的值。
在下面的脚本中,当按下按钮时,电影剪辑实例fish在x和y方向均放大一倍:
on (press) {
setProperty (&Pfish&P, _xscale, &P200&P);
setProperty (&Pfish&P, _yscale, &P200&P);
10.复制电影剪辑:duplicateMovieClip
duplicateMoviClip动作可以在动画播放时复制出另一个电影剪辑实例,该动作的语法格式如下:
duplicateMovieClip(target, newname,
动作中的target参数指定要复制的电影剪辑的目标路径;newname是复件电影剪辑实例名;depth是放置复件电影剪辑实例的层级号。这个参数确定电影剪辑实例的堆叠顺序,当多个电影剪辑实例或对象互相重叠时,堆叠在上面的电影剪辑会遮挡下面的电影剪辑。使用duplicateMovieClip动作复制电影剪辑时要注意,如果前后复制的两个电影剪辑的depth参数都一样,或者说都放在同一个层级,后面复制的电影剪辑将会取代前一个电影剪辑。
11.电影剪辑事件管理动作:onClipEvent
onClipEvent动作用于处理电影剪辑事件。该动作的语法格式如下:
onClipEvent(movieEvent);{
动作中的movieEvent参数指定电影剪辑事件。本动作只能指派给电影剪辑实例。当指定的剪辑事件发生时,执行该动作内的语句。电影剪辑事件包括:
load :电影剪辑实例在时间轴中出现时发生。
:电影剪辑实例在时间轴中卸载后的第一帧发生。与unload剪辑事件关联的动作在此帧中其他任何动作之前处理。
enterFrame
:在播放电影剪辑实例中任一帧时发生。与enterFrame剪辑事件关联的动作在此帧中其他任何动作之后被处理。
:每当移动鼠标时发生。使用_xmouse和_ymouse属性可以确定当前鼠标的坐标。
mouseDown :鼠标左键按下时发生。
mouseUp :释放鼠标左键时发生。
:当某一键被按下时发生。使用Key.getCode方法可以获得最近一次按键的信息。
keyUp :释放某一按键时发生。
:当接收到loadVariables或loadMovie动作载入的数据时发生。对于loadVariables动作,data事件只在载入最后一个变量时发生一次;对于loadMovie动作,每读入一段数据data事件就发生一次。
(二)使用动作面板编写脚本
1.打开动作面板
选择“Window→Actions”(菜单命令),可以打开动作面板。在时间轴中选择某帧并右击,或在编辑区中选择一个电影剪辑实例或按钮并右击,然后从弹出的快捷菜单上选择“Actions”选项,也可以打开动作面板。
这里提醒读者注意,在编辑区选择按钮或电影剪辑的一个实例,会使动作面板处于激活状态。如果按钮或电影剪辑被选择,动作面板标题会改变为“Object
Actions”(对象动作);如果帧被选择,动作面板标题会变为Frame Actions(帧动作)。
动作面板有两种编辑模式:正常模式(Normal Mode)和专家模式(Expert
Mode)。你可以使用任一种模式编辑动作脚本。选择动作面板的编辑模式的方法是:在动作面板显示出来的情况下,单击该面板右上角的箭头,从弹出菜单上选择“Normal
Mode”或“Expert Mode”。
2.在正常模式中编辑脚本
在正常模式中编辑脚本,你可以通过从面板左边的动作工具箱列表中选择动作来创建动作脚本。工具箱列表包含基本动作(Basic
Actions)、动作(Actions)、操作符(Operators)、函数(Functions)、属性(Properties)和对象(Objects)等动作类型。它们就像文件夹一样,单击可以展开或折叠。基本动作类型中包括最简单的Flash动作,且只有在正常模式中才可用。
下面介绍在正常编辑模式中编写动作脚本的操作方法。
(1)选择动作
单击工具箱列表中的动作类型,显示出该类型包含的动作。然后双击一个动作,该动作就被自动添加到右边的动作脚本窗口中;或使用拖放的方法,把选定的动作直接拖到脚本窗口中。
你可以添加、删除或改变动作语句的顺序,也可以在面板底部的参数面板(或称参数区)中给动作输入参数。
在正常模式中,可以使用动作面板中的控件删除动作列表中的语句或改变语句的顺序。这些控件在管理由多个语句组成的帧动作或按钮动作方面特别有用。
(2)给动作设置参数
5的动作很多,有些不需要任何参数(如stop()),有些则必须指定参数。动作面板下部有一个参数区,提示你正确设置参数。例如,我们在脚本窗口中添加了if动作,需要给该动作指定条件,可以按下面的操作步骤设置参数:
&#9312;如果动作面板的参数区没有显示,单击面板右下角的小三角按钮,可以显示参数区。
&#9313;在脚本窗口的动作列表中选择一种动作(本例为if),然后在参数区中输入参数(本例输入I&=10)。
有些动作的参数设置稍为复杂一些。例如,要给gotoAndPlay()动作指定参数,在脚本窗口选择该动作后参数区显示。
在参数区,有3个参数:Scene(场景)、Type(类型)和Frame(帧)。3个参数均有下拉菜单,你可以弹出相应的下拉菜单,从中选择需要的参数。Scene参数主要用于设定要跳转到哪个场景播放,对于多场景动画才有用;Type参数用于设定帧编号(Frame
Number)或帧标签(Frame Label)等选项。
给有些动作设置参数时,在一些参数框右边有一个表达式(Expression)复选框。对于这种参数,应该根据你输入的参数的类型决定是否要勾选此复选框。例如,我们使用set
variable动作,给变量x赋值。如果你给x提供的参数是一个字符串常数,就不要勾选此复选框,否则就要勾选该复选框。
总之,随着选定的动作的不同,参数区的显示也不同,参数的设置方法也有差别。但是,只要你深入了解每个动作的参数要求,设计的方法也就不难掌握。对于某个具体动作的参数要求,我们将在后面的章节介绍。
(3)编辑脚本窗口中的动作
如果要调整动作列表中动作的排列顺序,先在动作列表中选择一个动作,然后单击动作面板的上箭头或下箭头按钮,即可上下移动动作。你也可以用鼠标上下拖动动作来调整动作的排列顺序。
如果要删除脚本窗口中的动作,先在动作列表中选择一个动作,然后单击删除(-)按钮。
如果要改变动作的参数,在动作列表中选择一个动作,然后在参数框中输入新值即可。
(4)改变工具箱列表和脚本窗口的大小
拖动工具箱与动作列表之间的垂直拆分条,可以调整工具箱列表和脚本窗口的相对大小。双击拆分条,隐藏工具箱列表;再次双击拆分条,重显工具箱列表。单击拆分条上的左箭头按钮或右箭头按钮,显示或隐藏工具箱列表。当工具箱列表被隐藏时,你仍然可以用动作面板左上角的添加(+)按钮访问它的选项。
如果要调整动作面板的大小,也可以像Windows的窗口样通过拖曳面板的边框来改变面板的大小。
3.在专家模式中编辑动作脚本
专家模式是Flash
5提供给高级用户编写动作脚本的一种编辑模式。如果你对动作脚本语言的各种动作的语法和应用比较了解,使用专家模式编写脚本效率更高。在专家模式,你可以在该面板右边的脚本窗口中输入动作脚本,也可以从工具箱列表中选择动作来创建动作。你可以像在文本编辑器中编写脚本一样编辑动作,给动作输入参数,也可以在文本框中直接删除动作,就像编写javascript或VBScript一样。专家模式的动作面板。
专家模式在以下几个方面与正常模式不同:
&#9312;使用添加(+)按钮可以弹出动作菜单,从中选择一项,或从工具箱列表中选择一项并双击,将把选定项插入脚本编辑窗口的动作列表中。但是,不会像在正常模式那样自动添加必需的事件管理动作。
例如,在对象动作面板专家模式中,双击电影剪辑对象的getURL动作,在动作编辑窗口添加下列动作:
.getURL( url, window, method );
而在正常模式,则会自动添加必需的事件管理动作:
onClipEvent (load) {
.getURL( url, window, method );
&#9313;没有参数区显示,但可在脚本编辑窗口中直接输入参数。
&#9314;在按钮面板,仅有添加(+)按钮起作用,删除按钮(-)不可用,但可以像编辑一般文本一样选择、删除动作。
&#9315;上、下箭头按钮不可用。因此,不能像在正常模式那样,通过上下移动来改变动作的排列顺序。但是,可以通过拷贝、剪切和粘贴操作来实现这种功能。
在一个稍微复杂的动画中,可能有若干个动作脚本,每个脚本都保持着它自己的编辑模式。例如,我们可以在正常模式中给一个按钮实例编写脚本,而在专家模式下给另一个按钮实例编写脚本。切换选择这两个按钮时,动作面板的编辑模式也会跟着切换。
4.不同编辑模式间的切换
从动作面板右上角的弹出菜单上选择“Normal Mode”或“Expert
Mode”,可以来回切换编辑模式,选项旁边的对勾符号指示被选择的模式。在编写脚本时你可以在两种编辑模式之间切换,但改变编辑模式会改变脚本的格式。因此,每个脚本最好使用一种编辑模式。
&&&&三、Flash
5 ActionScript编程实用技术
这里介绍Flash 5
ActionScript编程实用技术,包括建立自定义光标、获取鼠标位置、捕获按键、建立滚动文本框、设置颜色值、建立声音控制和检测碰撞等。在这些实例中,综合应用了前面介绍到的一些函数、属性、对象和动作,请读者自行参考前面的章节。
(一)创建自定义光标
使用自定义光标之前要隐藏标准光标(即鼠标指针在屏幕上的表现形式),使用Flash 5的预定义鼠标对象的hide方法可以隐藏标准光标。
如果你想把电影剪辑用作自定义光标,可以使用startDrag动作。
下面是创建自定义光标的基本操作步骤:
1.创建一个用作自定义光标的电影剪辑。
2.在编辑区中选择该电影剪辑实例。
3.选择Window&Actions,打开Object
Actions面板。
4.在工具箱列表中,选择Objects,然后选择Mouse,把hide拖到脚本窗口。得到的代码如下:
onClipEvent(load){
Mouse.hide();
5.在工具箱列表中,选择
Actions,然后把startDrag拖到脚本窗口。
6.选择Lock Mouse to
Center(锁定鼠标在中间位置)复选框。得到的代码如下:
onClipEvent(load){
Mouse.hide()
startDrag("", true);
7.选择Control&Test
Movie,试用自定义光标。
当你使用自定义光标时,按钮仍然有效。最好把自定义光标放在时间轴顶层,以便在动画中移动鼠标时,它能够在按钮和其它对象之上移动。
(二)读取鼠标位置
5提供了_xmouse和_ymouse两个属性,使用这两个属性可以获取动画中鼠标指针的位置。每个时间轴都有自己的_xmouse和_ymouse属性,能够返回鼠标在相应坐标系中的位置。
在_level0动画的任何时间轴脚本中插入下列语句,可以返回主时间轴中_xmouse位置(x坐标)和_ymouse位置(y坐标):
x_pos = _root._
y_pos = _root._
语句中的_root代表主时间轴。要确定电影剪辑中鼠标的位置,可以使用电影剪辑实例名。例如,下列语句可以放在_level0动画的任何时间轴的动作脚本中,用以返回myMovieClip实例中_xmouse位置和_ymouse位置:
x_mcpos = _root.myMovieClip._
y_mcpos = _root.myMovieClip._
也可以在剪辑动作中使用_xmouse和_ymouse属性来确定电影剪辑中鼠标的位置:
onClipEvent(enterFrame){
xmousePosition = _
ymousePosition = _
变量x_pos和y_pos用来存储鼠标位置值。可以在动画的任何脚本中使用这些变量。在下例中,每当用户移动鼠标时x_pos和y_pos的值都被更新。
onClipEvent(mouseMove){
x_pos = _root._
y_pos = _root._
(三)捕捉用户按键
用户观看交互动画时,不仅使用鼠标,而且也会用键盘操作。因此,要设计复杂的交互动画,除了能够准确“感知”用户的鼠标位置外,还要能够捕获用户的按键。也就是说,除了掌握鼠标定位技术外,我们还必须掌握按键捕获技术。使用Flash
5预定义的Key(键)对象的方法可以方便地检测用户的最后按键。Key对象不需要构造函数,要使用它的方法,直接调用该对象即可,如下所示:
Key.getCode();
Key.getAscii();
使用Key对象,可以获得按键的虚拟键码或ASCII码值。使用Key对象的getCode方法,可以读取按键的虚拟键码;使用Key对象的getAscii方法,可以读取按键的ASCII码值。
键盘上每一个物理键都有一个虚拟键码(如左箭头键的虚拟键码是37)。使用虚拟键码,可以确保动画的控制在每一种键盘上都是相同的。
ASCII(美国信息交换用标准代码)码值被分配给每个字符集的前127个字符。ASCII
码值提供的是屏幕上每一种字符的信息。例如,字母“A”和字母“a”拥有不同的ASCII码值。
Key.getCode方法常用在onClipEvent事件处理程序中。把keyDown作为参数传递给事件处理程序,该事件处理程序即指令动作脚本,仅当真正按下了某个键时才检查最后按键的值。下面这个动画使用Key.getCode创建太空船的导航控制。
为动画设置键盘控制的步骤如下:
1.查看键盘键与虚拟键码对照表(请参考Flash
5的帮助),决定使用哪些键。
2.在编辑区中选择电影剪辑。
3.选择Window&Actions。
4.在工具箱Actions类型中双击onClipEvent动作 。
5.在参数区中选择Key down事件。
6.在工具箱Actions类型中双击if动作。
7.在Condition(条件)参数框中单击,在工具箱列表中选择Objects,然后选择Key,双击getCode。
8.在工具箱Operators(操作符)类型中双击相等操作符(==) 。
9.在相等操作符右边输入虚拟键码(本例输入32)。得到的代码如下:
onClipEvent(keyDown) {
if (Key.getCode() == 32) {
10.为设置的按键选择一个要执行的动作。例如,设置当空格键(32)被按下时执行跳转到下一帧动作。得到的代码如下所示:
onClipEvent(keyDown) {
if (Key.getCode() == 32) {
nextFrame();
11.选择Control&Test
Movie,测试键盘按键。
(四)创建声音控制
5的预定义Sound(声音)对象,可以控制动画中的声音。要调用Sound对象的方法,必须先创建一个新的Sound对象。然后,可使用attachSound方法在播放动画时把库中的声音插入动画中,使用setVolume方法控制音量,使用setPan方法调整左右声道平衡。
要创建声音控制,必需先把声音附加给时间轴,操作步骤如下:
1.选择File&Import(文件&导入)导入声音。
2.选择图符库中的声音,并从选项菜单中选择Linkage(连接)。
3.选择Export This
Symbol(导出这个图符),并赋予它标识符mySound。
4.在主时间轴选择第一帧,然后选择
Window&Actions。
5.从工具箱中把set variable动作拖到脚本窗口。
6.在Variable文本框中输入s 。
7.在工具箱列表中,选择Objects,再选择Sound,然后把new
Sound拖到Value(值)框中,并勾选右边的Expression复选框。代码如下:
s = new Sound();
8.在工具箱中双击Action类型下的evaluate动作。
9.在Expression框中输入s。
10.在工具箱列表的Objects类型中选择Sound,然后把attachSound拖到Expression框中。
11.给attachSound的ID参数输入 "mySound"。
12.在工具箱中双击evaluate动作。
13.在Expression框中输入 s。
14.在Objects类型中选择Sound,然后把start拖到Expression框中。代码如下:
s = new Sound();
s.attachSound("mySound");
s.start();
15.选择Control&Test
Movie,即可试听声音。
创建可滑动的音量控制,可按下面的步骤操作:
1.事先制作好一个按钮,然后把该按钮拖到编辑区。
2.选择该按钮,然后选Insert&Convert to
Symbol(插入&转换为图符),在弹出的对话框中选择电影剪辑行为。本步操作在按钮的第一帧创建一个电影剪辑。
3.选择该电影剪辑,然后选择Edit&Edit
Symbol(编辑&编辑图符),或在该电影剪辑上右击,从快捷菜单上选择Edit(编辑)
,进入图符编辑状态。
4.选择该按钮,然后选择Window&Actions。
5.在动作面板的工具箱列表中选择动作,在脚本窗口中输入下列动作:
on (press) {
startDrag ("", false, left, top, right,
dragging =
on (release, releaseOutside) {
stopDrag ();
dragging =
6.选择Edit & Edit
Movie(编辑&编辑动画)或单击位于层窗口上面的Scene
1按钮,返回主时间轴。
7.选择编辑区中的电影剪辑,然后选择 Window &
8.在动作面板的工具箱列表中选择动作,在脚本窗口中输入下列动作:
onClipEvent (load) {
bottom=_y+100;
onClipEvent(enterFrame){
if (dragging==true){
_root.s.setVolume(100-(_y-top));
9.把事先制作好的滑杆拖到编辑区,调整滑杆与按钮(滑块)的位置。
10.选择Control&Test
Movie,上下拖动滑块,即可调节音量。
(五)检测碰撞
碰撞检测技术在游戏设计中有着广泛的应用。例如,子弹击中目标,就是一种电影剪辑与电影剪辑之间的碰撞。通过检测,即可知道子弹是否击中了目标。
5中,可以用MovieClip(电影剪辑)对象的hitTest方法检测动画中的碰撞。hitTest方法检查一个对象是否已经与电影剪辑碰撞,并返回逻辑值真或假(true
false)。使用hitTest方法的参数可以指定编辑区中碰撞区域的x和y坐标,或使用另一个电影剪辑的目标路径作为碰撞区。
使用hitTest方法可以测试电影剪辑与点之间的碰撞,也可以测试两个电影剪辑之间的碰撞。下面就给大家介绍检测两个电影剪辑之间的碰撞的实现方法:
1.在编辑区创建一个动态文本框,在Text
Options面板的Variable框中输入status。
2.拖两个电影剪辑到编辑区,分别给它们赋予实例名mcHitArea和mcDrag。
3.选择mcHitArea,然后选择
Window&Actions。
4.双击工具箱中的evaluate。
5.在Expression框中输入下列代码:
_root.status=this.hitTest(_root.mcDrag);
6.在脚本窗口选择onClipEvent动作,然后选择enterFrame事件。
7.选择mcDrag,然后选择Window&Actions。
8.在工具箱中双击startDrag。
9.选择Lock Mouse to Center(锁定鼠标在中间)复选框。
10.在脚本窗口选择onClipEvent动作,然后选择Mouse
down事件。
11.在工具箱中双击stopDrag。
12.在脚本窗口选择onClipEvent动作,然后选择Mouse
13.选择Control&Test
Movie,拖动电影剪辑即可测试电影剪辑之间的碰撞,测试结果返回文本框中。
四、综合应用实例
本节向大家介绍一个制作实例—“打小虫”游戏,它们综合应用了ActionScript的一些函数、属性、动作和对象,希望读者能够通过这些实例的剖析举一反三,熟练掌握ActionScript的编程技巧。播放该动画时,画面中有一些小虫飞出,你可以移动画面中的瞄准器击打小虫。击中一个就记一分。
() 打小虫游戏
在这里,我并不打算详细讲解制作过程,只是对其中的脚本作一些必要的说明。
1.自定义函数
在这个动画中,要在画面中随机出现几个小虫,这是通过定义下面的函数,把图符库中的insect电影剪辑附加到时间轴中来实现的。生成小虫的个数由调用这个函数时传递的参数决定。代码如下:
function createInsects (count) {
for (I=1; I&= I++)
_root.attachMovie("insect", "insect"+I,
动画中使用的瞄准器是一个自定义光标,通过下面的函数定义来实现:
function changeCursor (movieclip) {
Mouse.hide();
_root.attachMovie(movieclip, "customCursor",
_root.customCursor.startDrag(true);
在上述代码中,首先隐藏标准光标,然后把图符库中的瞄准器附加到时间轴中,然后允许拖动。attachMovie方法中的深度参数使用9999,是为了避免与小虫的深度发生冲突。
用数学对象定义一个产生随机数的函数,是用来计算小虫随机出现的位置(坐标)。
Function calculateRandom (min, max) {
Math.floor(Math.random()*(max+1-min))+
下面的函数是根据小虫X坐标设置声音平衡,产生立体声效果。播放那个声音文件由调用函数时确定。
Function playSound (max, x, soundID) {
soundobject = new Sound();
soundobject.attachSound(soundID);
if (x&0) {
} else if (x&max) {
soundobject.setPan((x-(max/2))*100/(max/2));
soundobject.start();
在动画播放开始时用下面的代码对播放器和变量初始化。
Fscommand ("fullscreen", flase);
fscommand ("allowscale", true);
fscommand ("showmenu", false);
changeCursor("aimer");
在上述代码中,前三个语句用来初始化独立版播放器,它们的作用分别是:禁止全屏显示、允许缩放动画、关闭播放器的菜单显示。接下来的3句是初始化变量,num是飞出画面的小虫数,hit是打死的小虫数,score是游戏得分(每打死一个小虫得1分)。最后一句是调用自定义光标函数,启用自定义光标aimer(标准器)。注意,这里的“aimer”是图符连接属性中的标识名,不是图符库中的图符名。
3.确定画面中飞出的小虫数
if (hit == num) {
if (num&8) {
createInsects(num);
prevFrame ();
第一个条件hit==num判断打死的小虫是否与画面中飞出的小虫相等。如果相等,说明画面上的小虫已被全部打死,需要调用生成小虫函数createInsects生成小虫,飞出小虫的个数由传递给该函数的num确定。
第二个条件判断小虫数是否小于8。如果小于8,则小虫数递增1,起到限制画面中最多只能有8个小虫飞行的作用。
语句hit=0的作用是在每次画面上的小虫被全部打死后,在新的一批小虫飞出来时重新计算打死的小虫数。
prevFrame()和play()语句的作用是使动画跳转前一帧播放。
4.小虫剪辑动作
小虫电影剪辑实例的动作脚本主要解决测试小虫是否被打中(即剪辑与剪辑之间的碰撞)、小虫出现的位置(x和y坐标)、小虫的缩放比例,以及音效的配合。
下面这个剪辑事件的动作用来测试小虫是否被打中。这里使用电影剪辑的目标路径(_root.customCursor.hitarea)作为碰撞区域。如果发生了碰撞(即瞄准器击中了小虫)就停止蜂鸣声的播放,然后播放小虫被打死的声音splatter,累加分数,然后转到“hit”帧(小虫被打死状态)播放。
onClipEvent (mouseDown) {
if (this.hitTest(_root.customCursor.hitarea))
soundobject.stop();
_root.playSound(550, _parent._x,
"splatter");
_root.score++;
_parent.gotoAndPlay("hit");
通过调用calculateRandom函数随机产生小虫出现的初始位置,并把x坐标限制在-1500与-50之间,y坐标限制在80与200之间。接着设定小虫的初始缩放比例(_xscale和_yscale)和小虫飞行的步进增量(xStep和yStep),播放小虫飞行的配音(蜂鸣声buzz)。
onClipEvent (load) {
_parent._x = _root.calculateRandom(-1500,
_parent._y = _root.calculateRandom(80,
scale = 10;
_parent._xscale =
_parent._yscale =
xStep = 12;
yStep = 8;
soundobject = new Sound(this);
soundobject.attachSound("buzz");
soundobject.setPan(-100);
soundobject.start(0, 999);
要让小虫在画面中飞行,就要改变小虫的坐标。下面的脚本就是产生小虫动画的。
onClipEvent (enterFrame) {
_parent._x = _parent._x+
_parent._y =
_parent._y+(Math.sin(_parent._x/100)*ystep);
// 把小虫放大和调转飞行方向
if (_parent._x&-30 and
xstep&0) {
xstep = -(xstep-(xstep/16));
ystep = -(ystep-(ystep/16));
scale = _parent._yscale+4;
_parent._xscale =
_parent._yscale =
} else if (_parent._x&580 and
xstep&0) {
xstep = -(xstep-(xstep/16));
ystep = -(ystep-(ystep/16));
scale = _parent._yscale+4;
_parent._xscale = -
_parent._yscale =
// 根据小虫的x坐标设置立体蜂鸣声
if (_parent._x&0) {
} else if (_parent._x&550)
x=_parent._x;
soundobject.setPan((x-(550/2))*100/(550/2));
5.瞄准器剪辑动作
瞄准器剪辑动作的作用是,当按下鼠标按键时播放相应的配音(zish),改变鼠标光标(瞄准器)的显示状态。释放鼠标按键时恢复鼠标光标的正常显示状态。
onClipEvent (mouseDown) {
_root.playSound(640, _parent._x,
gotoAndPlay (2);
onClipEvent (mouseUp) {
gotoAndPlay (3);
onClipEvent (mouseMove) {
updateAfterEvent();
6.删除死去小虫的电影剪辑
在小虫电影剪辑的最后一帧,我们加入了下面的脚本,其作用是删除死去小虫的电影剪辑,防止动画中载入剪辑积累过多。每删除一个剪辑,击中次数递增1。
removeMovieClip ("");
_root.hit++;
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

我要回帖

更多关于 spine 碰撞框 的文章

 

随机推荐