风雨
查看风雨 的博客
金钱 : 124
Level : 0
发帖数 : 4
最后登陆 : 2004/11/3
注册时间 : 2004/10/19
ACTION SCRIPT 教程(申请置顶) FLASH MX Actionscript教程 一 Actionscript基本术语解释 像其他脚本语言一样,Actionscript根据特定的语法规则使用特定的术语。以下将按字母顺序介绍重要的Actionscript术语,希望能对大家理解Actionscript有所帮助。 Actions(动作):是指导Flas在播放时执行某些操作的语句。 例如,gotoAndStop动作就可以将播放磁头转移到指定的帧或帧标识。 Actions(动作)也可以被称作statement(语句)。 :是允许将值传递给函数的占位符。例如,以下 语句中的函数welcome就使用了两个参数nrstName和hobby来接收值: funCtion WelCOme(firstName,hObby){ WelcomeTeXt="Hell0,"firStName+"I See yOU enjOy"+hObby; } lasses(类):是各种数据类型。用户可以创建"类"并定义对象的新类型。要定义对象的 类,用户需创建构造器函数。 Contnts(常量): 是不会改变的元素。常量对于值的比较非常有用。 Constructors(构造器):是用来定义"类"的属性和方法的函数。 以下代码通过创建Circle构造器函数生成了一个新的CircIe类: function Circle(x, y,radius){ this.x=x; this.y=y; this.radius=radius; } Data types(数据类型):是可以执行的千组值和操作。 Actionscript的数据类型包括:字符串、数值、逻辑值、对象和电影剪辑。 Events(事件):是在电影播放过程中发生的动作。例如,当电影载入时、当播放磁头到达某一帧时、当用户单击按钮或电影剪辑时、当用户按 压键盘上的按键时,都会产生不同的事件。 Expressions(表达式):是可以产生值的语句。例如,2+2就是一个表达式。 Functions(函数):是可以重复使用和传递参数的代码段,可以返回一个值。 例如,getPrope呵 函数就可以便用电影剪辑的实例名称和属性名称,返回属性值。getVersion函数可以返回当前播放电影的Flash播放器的版本。 Handlers(句柄):是可以管理诸如mouseDown或load事件的特殊动作。 例如,(onMouseEvent)和onClipEvent就是Actionscript的句柄。 Identtifiers(标识符):是用来指示变量、属性、对象、函数或方法的名称。标识符的首字母必须是字符、下划线(一)或美元符号($)。后续字符可以是字符、数字、下划线或美元符号。例如,firstName就是一个变量名。 Instances(实例):是属于某些class(类)的对象。每个类的实例都包含该类的所有属性和方法。 例如,所有电影剪辑实例都包含MovieClip类的属性 (透明度属性、可见性属性等)和方法 (例如gotoAndPlay、getURL等)。 Instancenames(实例名称):是一个惟一的名称。可以在脚本中作为目标被指定。 Keywords(关键字):是具有特殊意义的保留用词。例如,var就是一个关键字,它可以用来定义本地变量。 Methods(方法):是指定给对象的函数。在函数被指定给对象之后,该函数就可以被称为是该对象的方法。 例如,在以下示例中,clear就变成了conboller对象的方法: function Reset(){ x_pos=0, x_pos=0, } controIler·clear=Reset; controIIer·clear(); Objects(对象):是属性的集合。每个对象都有自已的名称和值。 对象允许用户访问某些类型的信息。例如,AcdonSchpt的预定义对象Date就提供了系统时钟方面的信息。 Operands(运算项):是由表达式中的运算符操控的值。 Operators(运算符):可以从一个或多个值中计算获得新值。 例如, 将两个数值相加就可以获得一个新值。 Parameters(参数):也被称之为Argument(参数),请参考Arguments(参数)条目。 PropeMes(属性):是定义对象的a而butes(属性)。例如,所有电影剪辑对象都具有一v;sible(可见性)属性,通过该属性可以决定电影剪辑是否显示。 Targetpaths(目标路径):是Flas中电影剪辑名称、变量和对象的垂直分层结构地址。主时间轴的名称是_root。在电影剪辑属性检查器中可以命名屯影剪辑的实例。 用户可以通过目标路径使动作指向电影剪辑,也可以使用目标路径获取或设置变量的值。 例如,以下示例语旬就是电影剪辑stereoConbol内部的变量volume的路径: _root.steroControl.volume Variables(变量):是存储了任意数据类型值的标识符。变量可以创建、修改和更新。变量中存储的值可以被脚本检索使用。在以下示例中,等号左边的是变量标识符,右边的则是赋予变量的值: X=5; name="Lolo"; customer.address="66 7th Street"; c=new Color(mcinstanceName); 二、Actonscript语法基础 Actionscript有自己的语法规则和标点符号,它们可以确定使用哪些字符和单词来创建 脚本以及按什么顺序来编写。 例如,在英语中,句点。表示一个句子的结束,而在Actionscript中,分号表示一个语句 的结束。 以下将介绍应用于所有 Actionscript的通用规则。绝大多数Actionscript条目还有其独特的需求。 1、 小点语法 在 Actionscript中,小点被用来指示和对象或电影剪辑相关联的属性或方法。它也可以被用来识别电影剪辑、变量、函数或对象的目标路径。小点语法表达式以对象名或电影剪辑名开始,后接小点,以要指定的元素结束。 例如,电影剪辑的_x属性表示电影剪辑在舞台上的x轴位置,表达式ballMC.x则引用了 电影剪辑实例ballMC的_x属性。 又如,如果在电影剪辑shoppingCart中嵌入了form电影剪辑,而在该电影剪辑内又设置了变量submit,则表达式shoppingCart.form.submit=true可以将form实例的submit变量值设置为true。 按同样的模式可以表示对象或电影剪辑的方法。例如,使用ballMC实例的play方法可以在ballMC的时间轴中移动播放磁头。其语句如下: baIlMC·play(); 小点语法还可以使用两个特殊的别名:_root和_parent。_root引用的是主时间轴。使用_root可以创建绝对目标路径。例如,以下语句可以调用当前主电影中functions电影剪辑的buildGameBoard函数: _root.functions.buildGameBoard(); 使用_parent可以引用当前电影剪辑的上一级电影剪辑。使用了_parent可以创建相对目标路径。例如,如果电影剪辑mimal中嵌入了电影剪辑dog,则dog实例中的以下语句可以让animal电影剪辑停止播放: _parent.stop(); 2、大括号 ActionSchpt语句使用大括号({})组合在一起,形成代码块。例 on(release){ myDate=newDate(); currentMonth=myDate·getMonth(); } 3、分号 ActionSChpt语句使用分号作为结束。例如,以下语句中就使用了分号结束每条语句: column=passedDate.getDay(); row=0; 如果忽略了分号,Flash也能正确编译脚本。例如,上面的语句就可以写成以下格式: coLumn=passedDate.getDay() row=O 但是,最佳做法还是应该使用分号。 4、圆括号 当定义函数时,所有参数都放置在圆括号内。例如 Function myFunction(name,age,reader){ ... } 当调用函数时,又需要使用圆括号将参数传递给函数。例如: myFunction("Steve",10,true); 使用圆括号还可以越过ActionSchpt的优先级顺序,使ActionScpt语句更容易阅读。 在小点语法中,还可以在小点左边使用圆括号获取表达式的值。 例如,在以下示例语句中,圆括号内的子旬newcolor(this)就可以创建一个新的颜色对象求取其值: onClipEvent(enterFrame){ (new Color(this)).setRGB(Oxffffff); } 如果不使用圆括号,则需要在代码中添加语句: onClipEvent(enterFrame){ myColor=newColor(this); myColor·setRGB(Oxfffffff; ) 5、大小写字母 在Actionnscript中,只有关键字是区分大小写的,其他则无所谓。大家可以根据自己的需要使用大小写。例如,以下语句是等价的: cat·hilite=true; CAT hilite=trUe; 但是,最佳的做法还是应该统一大小写规则,这样将使Actionscript代码中的函数和变量名称等更容易识别。 正因为Actionscript不区分大小写,所以必须注意避免使用和Actionscript内置对象相 同的变量名。例如,以下语句是不允许的: dateqewDate(); 在上面的示例中,可以考虑使用myDate,theDate等变量名。如果关键字的大小写不对,则脚本将出现错误。在动作面板中,大小写正确的关键字将使用蓝色显示。 6、批注 在动作面板中,使用comment动作可以给脚本添加批注信息,以代码更容易阅读。如果在团队中工作或要给他人提供示例,则使用批还可以向其他开发人员传递信息。 在选择comment动作之后,在脚本中将插入双斜杠字符(//)。例如 on(release){ //创建新的Date(日期)对象 myDate=newDate(); cmenMonth="myMonth·getMonth(); //将月份的数字转换为月份名 monthName=calcMonth(currentMonth); year=myDate.getfullYear(); cmentDate=myDate.getDat(); } 在动作列表中,批注以粉红色显示。可以添加任意长度的批注而不会影响导出文件的大小。它们也不必沿用Actionscript语法或关键字的规则。 7、关键宇 Actionscript在语言中保留了若干关键字以做特殊用途。不能使用它们作为变量名、函数或标签车。表1-3列出了Actionscript中的所有关键字。 表1-3 Actionscript中的所有关键字 Break clse instanceof typeof CaSe for new var Continue function return void Default if switch while Delete in this with 8、常量 常量也是一种属性,但是这种属性的值永远不会发生变化。 例如,常量BACKSPACE,ENTER,QUOTE,RETURN,SPACE 和TAB就是Key对象的属性,它们引用相应的键盘按键。例如,要测试用户是否按下了Enter键,可以使用以下语句: if(Key·getCode()=Key·ENTER){ alert="是否开始游戏?"; controIMC·go'toAndStop(5); } 第3楼 三、 Actionscript中的数据类型 数据类型描述了变量或Actionscript元素可以持有的信息种类。数据类型包含两大类:初始类和引用类。初始类数据类型又包括字符串值、数值和逻辑值,它们都有常量值,因此可以持有它们所代表元素的实际值。引用类数据类型包括电影剪辑和对象,它们的值是可变的,因此包含了对元素实际值的引用。此外还有两种特殊的数据类型:空值和未定义值。 每种数据类型都有自己的规则。本节将详细讨论这些规则。 1、字符串值 顾名思义,"字符串"就是由字符组成的序列。字符包括字母、数字和标点符号。在ActionSchript语句中,大家可以在单引号或双引号内输入字符串。字符串将被看作字符而不是变量。例如,以下语句中的L7就是一个字符串: favoriteBnd="L7"; 大家可以使用加号(十)运算符连接两个字符串。Actionscript将字符串开始或结束位置的空格看作是字符串的文字部分。例如,以下表达式将在逗号后面包含一个空格: greeting="Welcome,"+fistName; 尽管Actionscript不会区分对变量、实例名称和帧标记引用中的大小写,但是文本字符串是区分大小写的。例如,以下语句就会在指定的文本域变量中放置不同的文本,因为hello和HELLO是文本字符串。 invoice·display="HeLLo"; invoice·display="HELLo"; 要在字符串中包含引号,需在引号前面先输入反斜杠符号(h),这被称为"转码"。在ActiohSchpt中还有其他一些字符也不能正常输入,必须通过这种转码的方式。 表1-4列出了Actionscript中所有的转码字符。 \ b 退格键(ASCll8) \f 换页符(ASCII12) \n 换行符(ASC1110) \r 回车符(ASC1113) \t 制表符(ASCII9) \" 双引号 \" 引号 \\ 反斜杠 \000-\377 按八进制指定的字节 \x00-\xff 按十六进制指定的字节 \u0000-uffff 按十六进制指定的16位Unicode字符 2、数值 数值数据类型是双精度浮动数值。用户可以使用算术运算符加(十)、减 (一)、乘 (")、除(/)、余数 (%)、递增 (十十)和递减 (一一)来操控数值。也可以便用内置的Math对象来操控数值。例如,以下示例就便用了sqn(平方根)方法返回100的平方根: Math·Sqrt(l00); 3、 逻辑值 逻辑值只有两种可能:要么为true,要么为flse。有时候Actionscript也会将逻辑值true和flse转换为1和0。逻辑值经常和逻辑运算符一起,被用于做出比较以控制脚本流程的Actionscript语句中。例如,在以下脚本中,如果变量password的值为true,则电影开始播放: onClipEvent(enterFRAME){ lf(userName=ture &&password=ture){ play(); } } 4、 对象 对象是属性的集合。每个属性都有自己的名称和值。属性的值可以是任何Flash数据类型,甚至是对象数据类型。这一特点允许用户在对象中安排或嵌入其他对象。要指定对象及其属性,可以便用小点运算符。 例如,在以下语旬中,hoursWorked是weeklyStab的属性,而weeklySbts又是employee的属性: employee·WeeklyStats·hoursWOrked 我们可以便用Actionscript的内置对象来访问和操控特定类型的信息。例如,MaT对象包含了若干种方法,可以对用户传递的数值执行数学运算。以下示例就使用了sqn方法: squweRoot=Math·sqn(l00); 通过Actionscript的MovieClip对象包含的方法可以对舞台上的电影剪辑符号进行控制。例如,以下示例就使用了play和nextFrame方法: mcInstanceName.pIay(); mc2InstanceName.nextFrame(); 我们还可以创建自己的对象,组织电影中的信息。要在电影中添加交互性,用户可能需要许多不同的信息。例如用户姓名、球的移动速度、购物车上的项目名称、己经下载的帧数、用户的邮政编码以及最后被按下的按键等。创建自定义对象就可以有效组合这些信息,简化脚本编写任务、重复使用脚本等。 5、电影剪辑 电影剪辑是Flas中可以播放动画的符号。它们是惟一引用图形元素的数据类型。电影剪辑数据类型允许使用MovieClip对象的方法控制电影剪辑符号。使用小点运算符可以调用电影剪辑对象的方法。例如: myClip.startDrag(ture); parentClip.getURL("网址); 6、 空值 空值数据类型只有一个值:null ,它是对不存在值的引用。 7、未定义值 末定义值数据类型有一个值:undefined,被用于尚未指定值的变量。 不经历风雨 怎么见彩虹 没有人能随随便便成功…… ┤本图片及文字资料版权归 龙族酷少 和 Http://WwW.1yA.NeT ;共同所有。未经同意,请勿转载├ ┤大学生闪客联盟论坛非常感谢 龙族酷少 的支持与参与├ 2004-3-21 21:46:37 [广告] 大学生闪客联盟论坛棋馆,和网友们杀两盘吧! 第4楼 四、Actionscript中的变量 变量实际上就是一个信息容器。容器本身总是相同的,但是容器中的内容却可以修改。通过在电影播放时修改变量中的值,我们可以记录或保存由读者提供的信息、记录电影播放时改变的值或者判断某些条件的真假等。 变量可以存放任何数据类型。包括数字值、字符串值、逻辑值、对象或电影剪辑等。 通常存储在变量中的信息类型包括:URL 地址、用户名、数学运算结果、事件发生的次数或按钮是否被单击等。每个电影和电影剪辑都有自己的一组变量。每个变量都有独立于其他变量的值。 1、命名变量 变量名必须符合以下原则: (1)必须是标识符。 (2)不能是逻辑值 (True和False)。 (3)在自身范围内是惟一的。 2、输入变量 在Flash中,我们不必明确定义变量包含的数据类型。当变量被赋值时,Flash可以确定变量的数据类型。例如: X=3; 在表达式x=3中,Flash将取得运算符右边的值,确定它是数值类型。此后的赋值语句又可能改变x的类型。例如,x="hello"语句可以将x的数据类型改为字符串值。没有赋值的变量其数据类型为undefined。 Actionscript会在表达式需要时自动转换数据类型。例如,当我们将一个值传递给trace动作时,trace会自动将其值改变为字符串并发送到Output(输出)窗口。在包含运算符的表达式中,Actionscript会在需要时转换数据类型。例如,在和字符串连用时,加号(十)运算符会将其他运算项也转换成字符串: ¨Next in line,number"+7 Actionscript将数字7转换为字符串"7",然后添加到第一个字符串的末尾,得到的结果是以下字符串: ¨Next in line,number7" 在调试脚本时,确定表达式或变量的数据类型是常用的手段。使用typeof运算符就可以做到这一点。例如: trace(typcof(variableNema)); 要将字符串转换为数字值,可使用Number函数。要将数字值转换为字符串值,可使用string函数。 3、 设置变量使用范围 所谓变量的使用范围就是变量被认可和可以被引用的区域。在Actionscript中有3种类型的变量范围: 本地变量 在自身代码块中有效的变量 (在大括号内)。 时间轴变量 可以在使用目标路径指定的任何时间轴内有效。 全局变量 即使没有使用目标路径指定,也可以在任何时间轴内有效 内有效。 我们可以使用var语句在脚本内申明一个本地变量。例如,变量i和j常用于循环计数器。在以下示例中,i被用作本地变量,它只存在于函数makeDays中: function makeDays(){ var i; for(i=0;i<monthArray[month];i++){ _root·Days·attachMovie("DayDisplay",i,i+2000); _root·Days[i]·num=i+1; _rOOt·DayS[i]·_X=COlumn*_rOOt·Days[i]·_Width; _root·Days[i]·_y=row*_root·Days[i]·_height; column="coumn+1; if(column==7){ column=0; row=row+1; } } } 使用本地变量可以防止命名冲突,减少电影中可能发生的错误。例如,如果将name作为一个本地变量,则既可以在当前代码段中使用它来存储用户名,又可以在其他代码段中使用它存储电影剪辑的名称。因为它们都只在单独的范围内有效,所以不会发生冲突。 较好的做法是在函数的主体中使用本地变量。本地变量只能在其自身的代码块中修改。如果在函数的表达式中使用了全局变量,则当全局变量的值在函数外被修改时,函数也将被修改。 4、 申明变量 要申明常规变量,可使用set varble动作或赋值运算符 (=),这两种方法获得的结果是一样的。 要申明本地变量,可以在函数主体内使用var语句。本地变量只在自身的代码块中有效,超出该代码块即无效。 要申明全局变量,可以在变量名前面使用_global标识符。例如,以下示例创建的就是一个全局变量myName: _global·myName="George"; 要测试变量的值,可以便用bace动作将变量的值发送到输出窗口。 例如,bace(hoursWorked)就可以将变量horsWorked的值发送到测试模式的输出窗口中。用户也可以在测试模式的调试器中检查和设置变量值。 5、在脚木中使用变量 如果要在表达式中使用变量,则必须先申明该变量。如果使用了一 个未申明的变量,则变量的值将是mdenned,脚本也将产生错误。 例如: getURL(myWebSite); myWebSite="http:/, 申明变量mywebSite的语句必须首先出现,只有这样,getURL 动作中的变量才能被替换。 在脚本中,变量的值可以多次修改。变量所包含的数据类型影响到变量修改的方式和时间。初始数据类型 (例如字符串值和数值)都是通过值进行传递的,这意味着变量的实际内容被传递到变量中 在以下示例中,变量x被设置为15,在第2行中,该值被复制到变量y中。在第3行中,变量x的值被修改为30,但是变量y的值仍然保持为15,这是因为变量y不是引用了变量x的值,而是接受了在第2行传递的实际值15。 Var x=I5; var y=x; var x=30; 对象数据类型持有的是对值的引用。该引用就像一个指向变量内容的别名。当变量需要知道其值时,该引用就会询问内容并返回答案,其 间不需要给变量传输值。 以下就是一个通过引用进行传递的示例: VarmyArray=["tOm¨,"diCk"]; VarneWArray=nyArray; myAmay[I]="jack"; trace(newArray); 以上代码创建了一个Array(数组)对象myArray,该对象包含两个元素。新创建的变量newArray被传递的值是对myArray的引用而不是实际值。这样,当myArray的第二个元素发生变化时,引用它的变量newArray也受影响。所以,trace动作发送到输出窗口中的内容是tom、 jack。 在下面的示例中,myArray 包含一个数组对象,所以它被按引用的方式传递给函数zeroArray。zeroArray函数改变了myArray中数组的内 容。 function zeroArray(myArray){ var i; for(i=0;i<arry.lenght;i++){ array[i]==0; } } var myArray=new Array(); myArray[O]==l; myArray[l]==2; myArray[2]==3; Var OUt=ZerOArray(myArray) 函数zeroArray接受了数组对象作为参数并且将数组中所有元素的值都设置为0。它可以修改数组是因为该数组是按引用的方式传递的。 对除电影剪辑之外的所有其他对象的引用被称之为"硬引用",因为如果该对象被引用,则该对象不能被删除。对电影剪辑的引用是一种特殊类型的引用,被称之为"软引用",软引用并不强求被引用的对象存在。如果某个电影剪辑被removeMovieClip这样的动作所删除,则所有对该电影剪辑的引用都不再有效。
山不在高 有仙则名 水不在深 有龙则灵 技不在精 努力必行