AS是一种面 面向 向对 对象 象 . .. .. .. . 编程语言。使用ActionScript 可以控制对象,创建动画
元素及构造交互动画,提升动画效果和网络应用能力。
经常听一些初学者问:
flash中的 AS (ActionScript) 应该怎样学?不懂外文能学吗?从哪里开始学?
起码得学习哪些命令……
我的回答是:▲任何人都可以学习使用AS。▲没有 AS你也能制作出最好的
动画作品。▲复杂动画及网络交互动画必需使用 AS。▲学习 AS 从最基本、最
常用的指令开始。
学习 AS 的最佳途径还是 flash 提供的“帮助”及《语言手册》,如果你觉得
flash 的“帮助”晦涩难懂、一时不得要领,那么本系列就是想在这方面先给予
你一些实际的帮助,本册是第一辑,精选了最基本的 AS动作指令并加以简单说
明。
可以说,你如果把本辑罗列的动作指令掌握了,那么你足以看得懂大部分动
画源程序以及进行一般的动画编程。
2
一、影片控制
goto
语法: gotoAndPlay(scene, frame)
参数: scene:场景的名称。frame:帧的号或标签。如果你在当前场景中,
可以省略第一个参数。
说明:动作;这是我们最常用的指令。它将播放头转到场景中指定的帧并从该帧
开始播放。如果未指定场景,则播放头将转到当前场景中的指定帧。
相关的指令还有gotoAndPlay( )。
示例:下面是用户单击相关按钮时,播放头将转到当前场景中的第 30 帧并开始
播放。
on(release){
gotoAndPlay(30);
}
on
语法: on(mouseEvent) {statement(s);}
参数: statement(s)是指发生mouseEvent 时要执行的指令。
mouseEvent 是“事件”触发器。当发生此事件时,执行事件后面花
括号中的语句。mouseEvent 参数就是“鼠标事件” :
press:在鼠标指针经过按钮时按下鼠标;release:在鼠标指针经
过按钮时释放鼠标按钮;releaseOutside:当鼠标指针在按钮之内时按
下按钮后,将鼠标指针移到按钮之外,此时释放鼠标;rollOut:鼠标
指针移出按钮区域;rollOver:鼠标指针滑过按钮;dragOut:在鼠标
指针滑过按钮时按下鼠标,然后滑出此按钮区域;dragOver:在鼠标
指针移过按钮时按下鼠标,然后移出此按钮,再移回此按钮;
keyPress(key):按下指定的key。此参数的key部分可使用Flash“键
盘键和键控代码值”中所列的任何键控代码进行指定,或者使用Key
对象的属性摘要中列出的任何键常量进行指定。
说明:事件处理函数;也是你不可不学的基本指令。它能把我们的鼠标事件或按
键事件与动画结合起来。
示例:下面脚本效果是,当按下鼠标按钮时,mymc 将可被拖动,当释放鼠标按
钮时,失去拖动特性并使该MC处于场景左上角座标(0,0)。
on(press){
startDrag("mymc");
}
on(release){
_root.mymc._y=0;
_root.mymc._x=0;
stopDrag();
}
3
Play
语法: play()
参数: 没有参数。
说明:动作;在时间轴中向前移动播放头。
stop
语法: stop
参数: 没有参数。
说明:动作;停止当前正在播放的影片。没有比这个指令更有用的了!一般放在
帧代码或按钮中。
示例:下面脚本的意思是,先让动画停止,再检查用户输入信息。如果输入的是
“沪上老康” ,则影片继续播放,否则,显示动态文本对象text 的内容。
stop();
if(name=="沪上老康"){
play();
}else{
text="抱歉,你无权观看影片!";
}
stopAllSounds
语法: stopAllSounds()
参数: 没有参数。
说明:动作;在不停止播放头的情况下停止影片中当前正在播放的所有声音。
示例:该指令运用极简单,可以放在关键帧或按钮中,下面代码是单击按钮停止
所有声音。但是,如果你的声音是“流”模式,那么被分配到声音的帧还是会有
声音的。
on(release){
stopAllSounds();
}
二、浏览器与网络
fsCommand
语法: fscommand("command", "parameters")
参数: 以上二个参数均是一个传递给“宿主”应用程序的字符串;或者是传
递给Flash 播放器的值。
说明:动作;使 Flash 影片能够与播放器或者浏览器进行通讯。还可使用
fsCommand 动作将消息传递给 Director,或者传递给 VB、VC++和其他可承载
ActiveX控件的程序。
示例:下面的脚本效果是,单击按钮时,动画将全屏幕播放。
on (release) {
4
fscommand("fullscreen", true);
}
下面指令将关闭播放器,但是如果swf文件在网页中,以下指令将无法消除
动画文件。
fscommand("quit");
下面指令指标播放器始终按动画的原始尺寸播放:
fscommand("allowscale",false);
getURL
语法: getURL(url [, window [, "variables"]])
参数: url:就是文档地址。
window:是可选参数,指定文档应加载到其中的窗口或HTML框架。
你可输入特定窗口的名称,或以下面的保留目标名称中选择:
_self 指定当前窗口中的当前框架;_blank 指定一个新窗口;_parent
指定当前框架的父级;_top指定当前窗口中的顶级框架;
而 variables 用于发送变量的 GET 或 POST 方法。如果没有变量,则
省略此参数。GET方法将变量追加到URL的末尾,该方法用于发送
少量变量。POST方法在单独的HTTP 标头中发送变量,该方法用于
发送长的变量字符串。
说明:动作;从指定地址加载文档到指定窗口,也可将变量传递到位于所定义地
址的另一个应用程序。
示例: 下面的示例需要你先用loadVariables()动作将hslkp 这个变量的值传递到场
景中(变量hslk实际上是一个文档地址),然后在一个新窗口中显示它。这个例
子的用处是你只需改变变量值从而可以改变加载的文档。
on(release){
getURL(incomingAd,"_blank");
}
loadMovie
语法: loadMovie("url",level/target[, variables])
参数: url:要加载的SWF文件或JPEG文件的绝对或相对URL。
target:指向目标影片剪辑的路径。目标影片剪辑将替换为加载的影
片或图像。level:是一个整数,指的是加载到的级别。二者只能指定
其一。注意,指定后者时应该使用loadMovieNum。最后,variables:
是一个可选参数,指定发送变量所使用的HTTP方法。该参数须是字
符串GET或POST,前面已经提到过。
说明:动作;在播放原始影片的同时将SWF或 JPEG文件加载到影片中。从而使
你可以在一个影片中同时显示多个影片,使用unloadMovie动作可删除相应的影
片。
示例:下面第一个范例是你先在舞台中创建一个名叫 hslk0 的 MC,把它放到适
当位置,然后用 loadMovie() 指令把另一个动画文件hslk2加载进来并精确地放
置在hslk1原来的位置。
on (release) {
loadMovie("hslk2.swf",_root.hslk0);
5
}
下面例子是加载一个图像,并取代原场景中名为hslk0的MC
loadMovie("hslk.jpg", "hslk0");
ant0323 2006-4-7 11:24
loadVariables
语法: loadVariables ("url" ,level/"target"[, variables])
参数: url:变量所处位置的绝对或相对地址。
level:就是接收这些变量的级别的整数。target:指向接收变量的MC
目标路径。variables:一个可选参数,指定发送变量所使用的 HTTP
方法(同上)。
说明:动作;从外部文件(它们可以是由CGI、ASP、PHP等脚本生成的文本或者
是TXT文件)读取数据,并设置Flash Player 级别或目标影片剪辑中变量的值。
也可以利用此法用新值动态更改动画中的变量。
示例:下面示例表示,如果场景中有个 MC 叫 mymc,内有一名为 dat 的动态文
本,外部有一个 hslk.txt 文字,内有 dat=”沪上老康”的内容,那么下面脚本就将
“沪上老康”这一值赋给了mymc中的dat。
on (release) {
loadVariables("hslk.txt", "_root.mymc");
}
unloadMovie
语法: UnloadMovie(level/"target")
参数: level:加载影片的级别。上面已经说过,从一个级别卸载影片时应该
用unloadMovieNum。
说明:动作;从影片中删除一个已加载的影片或影片剪辑。
示例:下面的示例卸载主时间轴上的影片剪辑 mymc1,然后将 mymc2.swf 加载
到级别 99 中。
on (press) {
unloadMovie ("_root.mymc1");
loadMovieNum ("mymc2.swf",99);
}
当要卸载mymc2时,在适当地方加入如下脚本:
on (press) {
unloadMovieNum (99);
}
三、影片剪辑控制
duplicateMovieclip
语法: duplicateMovieClip(target, newname,depth)
参数: target:被复制 MC 的目标路径。newname:新 MC 的惟一标识符。
depth:新 MC 的惟一深度级别。必须为每个复制的影片剪辑分配一
个惟一的深度级别,以防止它替换现有深度上的影片。
6
说明:动作;当影片正在播放时,创建一个影片剪辑的实例。无论播放头在原始
影片剪辑(或“父级”)中处于什么位置,复制的影片剪辑的播放头始终从第一帧
开始。如果删除父影片剪辑,则复制的影片剪辑也被删除。
示例:下面这一句是复制主场景上名叫jm的 MC,新名称为 jmm,深度为900。
duplicateMovieClip("_root.jm", "jmm", 900);
而下面这个范例是把主场景上的hslk影片夹反复复制, 直到变量I累加到
450才停止,新MC的名称是lk加上I的累加值,深度值也是I累加值。
i = 0;
do {
i = i+1;
duplicateMovieClip("/hslk", "lk"+i, i);
} while (i<450);
onClipEvent
语法: onClipEvent(movieEvent){
statement(s);
}
参数: movieEvent 是一个称作“事件”的触发器。当事件发生时,执行该事
件后面花括号中的语句。
可以为movieEvent 参数指定下面的任何值:
load:影片剪辑一旦被实例化并出现在时间轴中时,即启动此动作;
unload:在从时间轴中删除影片剪辑之后,此动作在第一帧中启动。
enterFrame:以影片帧频不断地触发此动作。
mouseMove:每次移动鼠标时启动此动作。而_xmouse和_ymouse属
性用于确定当前鼠标位置;
mouseDown:当按下鼠标左键时启动此动作;
mouseUp:当释放鼠标左键时启动此动作;
keyDown:当按下某个键时启动此动作,而也可使用 Key.getCode 方
法获取最近按下的键的有关信息;
keyUp:当释放某个键时启动此动作,也可使用 Key.getCode 方法获
取最近按下的键的有关信息;
data: 当在 loadVariables 或 loadMovie 动作中接收数据时启动此动作。
statement(s):发生mouseEvent 时要执行的指令。
说明:事件处理函数;触发为特定影片剪辑实例定义的动作。
示例:下面脚本的意思是,当加载某个MC时,包括来自外部的脚本文件hslk.as,
并运行这些脚本。
onClipEvent (load) {
#include "hslk.as"
}
removeMovieClip
语法: removeMovieClip(target)
参数: target:用duplicateMovieClip创建的影片剪辑实例的目标路径,或者
用MovieClip对象的 attachMovie或duplicateMovieClip方法创建的影
7
片剪辑的实例名。
说明:动作;删除用MC对象的attachMovie 或 duplicateMovieClip方法创建的影
片剪辑实例。
setProperty
语法: setProperty("target",property,value/expression)
参数: target:要设置其属性的影片剪辑实例名称的路径。property:要设置
的属性。value:属性的新文本值。expression:计算结果为属性新值
的公式。
说明:动作;当影片播放时,更改影片剪辑的属性值。
示例:下面脚本的意思是单击按钮时,把名为hslk的 MC的透明度设置为60%:
on (release) {
setProperty("hslk", _alpha, "60");
}
startDrag
语法: startDrag(target,[lock ,left ,top ,right,bottom])
参数: target:要拖动的影片剪辑的目标路径。lock:一个布尔值,指定可拖
动影片剪辑是锁定到鼠标位置中央(true),还是锁定到用户首次点击
该影片剪辑的位置上(false)。
left、top、right、bottom 相对于影片剪辑父级坐标的值,这些坐标指
定该影片剪辑可拖动的矩形范围,以上参数是可选的。
说明:动作;使target 设置的MC在场景中可拖动。一次只能拖动一个影片剪辑。
执行 startDrag 动作后,影片剪辑将保持可拖动状态,直到被 stopDrag 动作明确
停止,或者直到为其他影片剪辑调用了 startDrag动作为止。
示例:下面的效果是某个MC影片当鼠标放在其上时能被拖动,鼠标键抬起时停
止,当然,你必需在MC中建立一个按钮,并在按钮中加入如下脚本:
on (press) {
startDrag(this,true);
}
on (release) {
stopDrag();
}
updateAfterEvent
语法: updateAfterEvent()
参数: 无参数。
说明:动作; 当在onClipEvent 处理函数中调用它时, 或作为传递给setInterval (这
是一种“间隔函数” ,可以更新来自数据库的变量或更新时间显示)的函数或方法的一
部分进行调用时,该动作更新显示(与为影片设置的每秒帧数无关)。如果对
updateAfterEvent 的调用不在 onClipEvent 处理函数中,也不是传递给setInterval
的函数或方法的一部分,则该动作被忽略。
ant0323 2006-4-7 11:25
四、变量
delete
语法: delete reference
参数: reference:要消除的变量或对象的名称。
说明:运算符; 销毁由reference参数指定的对象或变量, 如果该对象被成功删除,
则返回true;否则返回false值。
示例:下面的脚本意思是创建一个Temp对象,然后在你不再需要时删除Temp。
temp = new Object();
temp.name = 'hslk';
delete temp;
set variable
语法: set(variable,expression)
参数: variable:保存 expression 参数值的标识符;expression:分配给变量
的值。
说明:动作;为变量赋值。variable是保存数据的容器。变量可以保存任何类型的
数据(例如,字符串、数字、布尔值、对象或影片剪辑)。每个影片和影片剪辑的
时间轴都有其自己的变量集, 每个变量又都有其自己独立于其他时间轴上的变量
的值。
示例:下面这一句把名称为hslk的MC的原始水平位置记录在变量myx中:
set("myx", getProperty ("hslk", _x ));
然后,在动画播放过程中需要其回复原来位置时可以把 myx再赋予 hslk的_x属
性。
var
语法: var variableName1 [= value1][...,variableNameN [=valueN]]
参数: variableName:标识符;value:分配给变量的值。
说明:动作;用于声明局部变量。如果在函数内声明局部变量,那么变量就是为
该函数定义的,且在该函数调用结束时到期。如果变量不是在块({})内声明的,
但使用call动作执行该动作列表,则该变量为局部变量,且在当前列表结束时到
期。如果变量不是在块中声明的,且不使用call动作执行当前动作列表,则这些
变量不是局部变量。
with
语法: with (object) {
statement(s);
}
参数: object:动作脚本对象或影片剪辑的实例;
statement(s):花括号中包含的动作或一组动作。
说明:动作;允许你使用 object 参数指定一个对象(比如影片剪辑),并使用
statement(s)参数计算对象中的表达式和动作。这个动作相当简捷方便,建议朋友
9
们一定得掌握哦。
示例:下面的示例设置处于主场景中名称为 hslk 的 MC 的_x 和_y 属性,然后播
放头停止在hslk影片夹中的第30帧上。
with (_root.hslk) {
_x = 50;
_y = 100;
gotoAndStop(30);
}
五、条件与循环
break
语法: Break
参数: 无参数。
说明:动作;出现在一个循环(for、for..in、do while 或while 循环)中,或者出现
在与 switch动作内特定 case 语句相关联的语句块中。break 动作可命令 Flash 跳
过循环体的其余部分,停止循环动作,并执行循环语句之后的语句。使用 break
动作可跳出一系列嵌套的循环。
示例:下面的示例使用 break 动作退出一个循环,如果没有该动作,则该循环为
无限循环。
i = 0;
while (true) {
if (i >= 100) {
break;
}
i++;
}
case
语法: case expression: statements
参数: expression:任何表达式;statements:任何语句。
说明:关键字;定义用于switch动作的条件。如果case关键字后的 expression参
数全等于(===)switch动作的 expression参数,则执行statements参数中的语句。
如果在switch语句外部使用case动作,则将产生错误,脚本不能编译。
continue
语法: Continue
参数: 无参数。
说明:动作;出现在几种类型的循环语句中;它在每种类型的循环中的行为方式
各不相同。在while 循环中,使影片跳过循环体的其余部分,并转到循环的顶端
(在该处进行条件测试)。在do while 循环中,可使影片跳过循环体的其余部分,
并转到循环的底端(在该处进行条件测试)。在 for 循环中,可使影片跳过循环体
10
的其余部分,并转而计算 for循环的后表达式(post-expression)。在 for..in循环中,
可使影片跳过循环体的其余部分,并跳回循环的顶端(在该处处理下一个枚举
值)。
default
语法: default: statements
参数: statements:任何语句。
说明:关键字;定义switch动作的默认情况。对于一个给定的switch动作,如果
该 switch 动作的 Expression 参数与 case 关键字后面的任何一个 Expression 参数
都不相等,则执行这些语句。
示例:在下面的示例中,表达式 A与表达式 B 或 D 不相等,所以运行 default 关
键字后面的语句,并把信息发送到“输出”面板。
switch (A) {
case B:
C;
break;
case D:
E;
break;
default:
trace ("没有一个是相同的!");
}
注意,trace指令是向“输出”面板发送信息。
do while
语法: do {
statement(s)
} while (condition)
参数: condition:要计算的条件。statement(s)只要condition参数计算结果为
true就会执行的语句。
说明:动作;执行语句,只要条件为true,就计算循环中的条件。
else
语法: else statement
else {...statement(s)...}
参数: ondition:计算结果为true或 false的表达式。statement(s):如果 if语
句中指定的条件为false,则运行替代语句系列。
说明:动作;指定当if语句中的条件返回false时要运行的语句。
else if
语法: if (condition){
statement(s);
} else if (condition){
11
statement(s);
}
参数: condition:计算结果为 true 或 false 的表达式。statement(s):如果 if
语句中指定的条件为false,则运行替代语句系列。
说明:动作;计算条件,并指定当初始 if 语句中的条件返回 false 时要运行的语
句。 如果else if条件返回true, 则影片运行该条件后面花括号中的语句。 如果else
if条件为 false,则影片跳过花括号中的语句,运行花括号之后的语句。在脚本中
可以使用else if动作创建分支逻辑。
示例:下面的示例使用 else if 动作检查对象的每一边是否都在特定的边界内,
如果对象超出边界,则将其发回并倒转其行进路径
if (result<60) {
grade=”不及格”;
}else if(result<70){
grade=”及格”;
}else if(result<85){
grade=”较好”;
}else if(result<=100){
grade=”优秀”;
}
ant0323 2006-4-7 11:26
for
语法: for(init; condition; next) {
statement(s);
}
参数: init:一个在开始循环序列前要计算的表达式,通常为赋值表达式。
此参数还允许使用Var语句。condition:计算结果为true或 false的表
达式。在每次循环迭代前计算该条件;当条件的计算结果为 false 时
退出循环。next:一个在每次循环迭代后要计算的表达式;通常为使
用递增或递减运算符的赋值表达式。statement(s):在循环体内要执行
的指令。
说明:动作;一种循环结构,首先计算 init(初始化)表达式一次,只要 condition
的计算结果为 true,则按照以下顺序开始循环序列,执行 statement,然后计算
next 表达式。
示例:下面是使用 for 重复执行同一动作的示例。在下面的代码中,for 循环将
从 1 到 100 的数字相加:
var sum = 0;
for (var i=1; i<=100; i++) {
sum = sum + i;
}
for..in
语法: for(variableIterant in object){
statement(s);
}
12
参数: variableIterant:作为迭代变量的变量名,引用数组中对象或元素的每
个属性。object:要重复的对象的名称。statement(s):要为每次迭代
执行的指令。
说明:动作;循环通过数组中对象或元素的属性,并为对象的每个属性执行
statement。
示例:下面的示例使用 for..in 迭代某对象的属性:
myObject = { name:'Tara', age:27, city:'San Francisco' };
for (name in myObject) {
trace ("myObject."+ name + " = " + myObject[name]);
}
此示例的输出如下所示:
myObject.name = Tara
myObject.age = 27
myObject.city = San Francisco
if
语法: if(condition) {
statement(s);
}
参数: condition:计算结果为true或 false的表达式。statement(s):如果或当
条件的计算结果为true时要执行的指令。
说明:动作;对条件进行计算以确定影片中的下一步动作。如果条件为 true,则
Flash将运行条件后面花括号({})内的语句。如果条件为 false,则 Flash跳过花括
号内的语句,运行花括号后面的语句。使用if动作可在脚本中创建分支逻辑。
示例:在下面的示例中,括号内的条件对变量 name 进行计算以查看其是否具有
文本值 "Erica"。如果有,则运行花括号内的play()动作。
if(name == "Erica"){
play();
}
switch
语法: switch (expression){
caseClause:
[defaultClause:]
}
参数: expression:任意表达式。caseClause:一个 Case 关键字,其后跟表
达式、冒号和一组语句,如果在使用全等的情况下,此处的表达式与
switch expression参数相匹配,则执行这组语句。defaultClause:一个
default 关键字,其后跟着如果这些 Case 表达式都不与 switch
expression参数全等匹配时要执行的语句。
说明:动作;创建动作脚本语句的分支结构。像If动作一样,Switch 动作测试一
个条件,并在条件返回true值时执行语句。
示例:在下面的示例中,如果number参数的计算结果为1,则执行case 1后面的
trace() 动作,如果 number 参数的计算结果为 2,则执行 case 2 后面的 trace()动
13
作,依此类推。如果case表达式与 number参数都不匹配,则执行default 关键字
后面的trace()动作。
switch (number) {
case 1:
trace ("case 1 tested true");
break;
case 2:
trace ("case 2 tested true");
break;
case 3:
trace ("case 3 tested true");
break;
default:
trace ("no case tested true")
}
while
语法: while(condition) {
statement(s);
}
参数: condition:每次执行 while 动作时都要重新计算的表达式。如果该语
句的计算结果为true,则运行statement(s)。statement(s):条件的计算
结果为true时要执行的代码。
说明:动作;测试表达式,只要该表达式为 true,就重复运行循环中的语句或语
句序列。 在运行该语句块之前,首先测试 condition;如果测试返回 true,则运
行该语句块。如果该条件为 false,则跳过该语句块,并执行 while 动作语句块
之后的第一条语句。
通常当计数器变量小于某指定值时,使用循环执行动作。 在每个循环的结
尾递增计数器的值,直到达到指定值为止。此时,condition不再为true,因此循
环结束。
六、自定义函数
call
语法: call(frame)
}
参数: frame:时间轴中帧的标签或编号。
说明:动作;执行被调用帧中的脚本,而不将播放头移动到该帧。一旦执行完该
脚本,局部变量将不存在。
function
语法: function ([parameter0, parameter1,...parameterN]){
14
statement(s)
}
参数: functionname:新函数的名称。Parameter:一个标识符,表示要传递
给函数的参数。这些参数是可选的。statement(s)为 function的函数体
定义的任何动作脚本指令。
说明:您定义的用来执行特定任务的一组语句。可以在影片的一个地方“声明”
或定义函数, 然后从影片的其他脚本调用它。 定义函数时, 还可以为其指定参数。
参数是函数要对其进行操作的值的占位符。每次调用函数时,可以向其传递不同
的参数。这使您可以在不同场合重复使用一个函数。
示例: 下面的示例定义函数sqr, 该函数接受一个参数并返回该参数的square(x*x)。
如果在同一脚本中声明和使用该函数,则可以先使用该函数,后声明它。
y=sqr(3);
function sqr(x) {
return x*x;
}
return
语法: return[expression]
return
参数: expression:要作为函数值计算并返回的字符串、数字、数组或对象。
此参数是可选的。返回值:如果提供了expression参数,则返回计算
的结果。
说明:动作;指定由函数返回的值。return 动作计算 expression 并将结果作为它
在其中执行的函数的值返回。return动作导致函数停止运行,并用返回值代替函
数。如果单独使用return语句,它返回null。
示例:下面的示例在sum() 函数体内使用return 动作,以返回三个参数相加后的
值。下一行代码调用sum()并将返回值赋予变量newvalue:
function sum(a, b, c){
return a + b + c;
}
newvalue = sum(4, 32, 78);
trace(newvalue);
注意,trace指令是向“输出”面板发送信息,这里将看到114。
Flash没有 ActionScript(AS)也能称为动
画,而 Flash有了 AS 更是动画,AS 赋予动画
那种音乐艺术的感受:有时抑扬顿挫,有时豪
放激越,有时娓娓抒情,有时出神入化,它的
交互特性更是手工无法替代的。
学 AS 动画,从最简单的开始……
元素及构造交互动画,提升动画效果和网络应用能力。
经常听一些初学者问:
flash中的 AS (ActionScript) 应该怎样学?不懂外文能学吗?从哪里开始学?
起码得学习哪些命令……
我的回答是:▲任何人都可以学习使用AS。▲没有 AS你也能制作出最好的
动画作品。▲复杂动画及网络交互动画必需使用 AS。▲学习 AS 从最基本、最
常用的指令开始。
学习 AS 的最佳途径还是 flash 提供的“帮助”及《语言手册》,如果你觉得
flash 的“帮助”晦涩难懂、一时不得要领,那么本系列就是想在这方面先给予
你一些实际的帮助,本册是第一辑,精选了最基本的 AS动作指令并加以简单说
明。
可以说,你如果把本辑罗列的动作指令掌握了,那么你足以看得懂大部分动
画源程序以及进行一般的动画编程。
2
一、影片控制
goto
语法: gotoAndPlay(scene, frame)
参数: scene:场景的名称。frame:帧的号或标签。如果你在当前场景中,
可以省略第一个参数。
说明:动作;这是我们最常用的指令。它将播放头转到场景中指定的帧并从该帧
开始播放。如果未指定场景,则播放头将转到当前场景中的指定帧。
相关的指令还有gotoAndPlay( )。
示例:下面是用户单击相关按钮时,播放头将转到当前场景中的第 30 帧并开始
播放。
on(release){
gotoAndPlay(30);
}
on
语法: on(mouseEvent) {statement(s);}
参数: statement(s)是指发生mouseEvent 时要执行的指令。
mouseEvent 是“事件”触发器。当发生此事件时,执行事件后面花
括号中的语句。mouseEvent 参数就是“鼠标事件” :
press:在鼠标指针经过按钮时按下鼠标;release:在鼠标指针经
过按钮时释放鼠标按钮;releaseOutside:当鼠标指针在按钮之内时按
下按钮后,将鼠标指针移到按钮之外,此时释放鼠标;rollOut:鼠标
指针移出按钮区域;rollOver:鼠标指针滑过按钮;dragOut:在鼠标
指针滑过按钮时按下鼠标,然后滑出此按钮区域;dragOver:在鼠标
指针移过按钮时按下鼠标,然后移出此按钮,再移回此按钮;
keyPress(key):按下指定的key。此参数的key部分可使用Flash“键
盘键和键控代码值”中所列的任何键控代码进行指定,或者使用Key
对象的属性摘要中列出的任何键常量进行指定。
说明:事件处理函数;也是你不可不学的基本指令。它能把我们的鼠标事件或按
键事件与动画结合起来。
示例:下面脚本效果是,当按下鼠标按钮时,mymc 将可被拖动,当释放鼠标按
钮时,失去拖动特性并使该MC处于场景左上角座标(0,0)。
on(press){
startDrag("mymc");
}
on(release){
_root.mymc._y=0;
_root.mymc._x=0;
stopDrag();
}
3
Play
语法: play()
参数: 没有参数。
说明:动作;在时间轴中向前移动播放头。
stop
语法: stop
参数: 没有参数。
说明:动作;停止当前正在播放的影片。没有比这个指令更有用的了!一般放在
帧代码或按钮中。
示例:下面脚本的意思是,先让动画停止,再检查用户输入信息。如果输入的是
“沪上老康” ,则影片继续播放,否则,显示动态文本对象text 的内容。
stop();
if(name=="沪上老康"){
play();
}else{
text="抱歉,你无权观看影片!";
}
stopAllSounds
语法: stopAllSounds()
参数: 没有参数。
说明:动作;在不停止播放头的情况下停止影片中当前正在播放的所有声音。
示例:该指令运用极简单,可以放在关键帧或按钮中,下面代码是单击按钮停止
所有声音。但是,如果你的声音是“流”模式,那么被分配到声音的帧还是会有
声音的。
on(release){
stopAllSounds();
}
二、浏览器与网络
fsCommand
语法: fscommand("command", "parameters")
参数: 以上二个参数均是一个传递给“宿主”应用程序的字符串;或者是传
递给Flash 播放器的值。
说明:动作;使 Flash 影片能够与播放器或者浏览器进行通讯。还可使用
fsCommand 动作将消息传递给 Director,或者传递给 VB、VC++和其他可承载
ActiveX控件的程序。
示例:下面的脚本效果是,单击按钮时,动画将全屏幕播放。
on (release) {
4
fscommand("fullscreen", true);
}
下面指令将关闭播放器,但是如果swf文件在网页中,以下指令将无法消除
动画文件。
fscommand("quit");
下面指令指标播放器始终按动画的原始尺寸播放:
fscommand("allowscale",false);
getURL
语法: getURL(url [, window [, "variables"]])
参数: url:就是文档地址。
window:是可选参数,指定文档应加载到其中的窗口或HTML框架。
你可输入特定窗口的名称,或以下面的保留目标名称中选择:
_self 指定当前窗口中的当前框架;_blank 指定一个新窗口;_parent
指定当前框架的父级;_top指定当前窗口中的顶级框架;
而 variables 用于发送变量的 GET 或 POST 方法。如果没有变量,则
省略此参数。GET方法将变量追加到URL的末尾,该方法用于发送
少量变量。POST方法在单独的HTTP 标头中发送变量,该方法用于
发送长的变量字符串。
说明:动作;从指定地址加载文档到指定窗口,也可将变量传递到位于所定义地
址的另一个应用程序。
示例: 下面的示例需要你先用loadVariables()动作将hslkp 这个变量的值传递到场
景中(变量hslk实际上是一个文档地址),然后在一个新窗口中显示它。这个例
子的用处是你只需改变变量值从而可以改变加载的文档。
on(release){
getURL(incomingAd,"_blank");
}
loadMovie
语法: loadMovie("url",level/target[, variables])
参数: url:要加载的SWF文件或JPEG文件的绝对或相对URL。
target:指向目标影片剪辑的路径。目标影片剪辑将替换为加载的影
片或图像。level:是一个整数,指的是加载到的级别。二者只能指定
其一。注意,指定后者时应该使用loadMovieNum。最后,variables:
是一个可选参数,指定发送变量所使用的HTTP方法。该参数须是字
符串GET或POST,前面已经提到过。
说明:动作;在播放原始影片的同时将SWF或 JPEG文件加载到影片中。从而使
你可以在一个影片中同时显示多个影片,使用unloadMovie动作可删除相应的影
片。
示例:下面第一个范例是你先在舞台中创建一个名叫 hslk0 的 MC,把它放到适
当位置,然后用 loadMovie() 指令把另一个动画文件hslk2加载进来并精确地放
置在hslk1原来的位置。
on (release) {
loadMovie("hslk2.swf",_root.hslk0);
5
}
下面例子是加载一个图像,并取代原场景中名为hslk0的MC
loadMovie("hslk.jpg", "hslk0");
ant0323 2006-4-7 11:24
loadVariables
语法: loadVariables ("url" ,level/"target"[, variables])
参数: url:变量所处位置的绝对或相对地址。
level:就是接收这些变量的级别的整数。target:指向接收变量的MC
目标路径。variables:一个可选参数,指定发送变量所使用的 HTTP
方法(同上)。
说明:动作;从外部文件(它们可以是由CGI、ASP、PHP等脚本生成的文本或者
是TXT文件)读取数据,并设置Flash Player 级别或目标影片剪辑中变量的值。
也可以利用此法用新值动态更改动画中的变量。
示例:下面示例表示,如果场景中有个 MC 叫 mymc,内有一名为 dat 的动态文
本,外部有一个 hslk.txt 文字,内有 dat=”沪上老康”的内容,那么下面脚本就将
“沪上老康”这一值赋给了mymc中的dat。
on (release) {
loadVariables("hslk.txt", "_root.mymc");
}
unloadMovie
语法: UnloadMovie(level/"target")
参数: level:加载影片的级别。上面已经说过,从一个级别卸载影片时应该
用unloadMovieNum。
说明:动作;从影片中删除一个已加载的影片或影片剪辑。
示例:下面的示例卸载主时间轴上的影片剪辑 mymc1,然后将 mymc2.swf 加载
到级别 99 中。
on (press) {
unloadMovie ("_root.mymc1");
loadMovieNum ("mymc2.swf",99);
}
当要卸载mymc2时,在适当地方加入如下脚本:
on (press) {
unloadMovieNum (99);
}
三、影片剪辑控制
duplicateMovieclip
语法: duplicateMovieClip(target, newname,depth)
参数: target:被复制 MC 的目标路径。newname:新 MC 的惟一标识符。
depth:新 MC 的惟一深度级别。必须为每个复制的影片剪辑分配一
个惟一的深度级别,以防止它替换现有深度上的影片。
6
说明:动作;当影片正在播放时,创建一个影片剪辑的实例。无论播放头在原始
影片剪辑(或“父级”)中处于什么位置,复制的影片剪辑的播放头始终从第一帧
开始。如果删除父影片剪辑,则复制的影片剪辑也被删除。
示例:下面这一句是复制主场景上名叫jm的 MC,新名称为 jmm,深度为900。
duplicateMovieClip("_root.jm", "jmm", 900);
而下面这个范例是把主场景上的hslk影片夹反复复制, 直到变量I累加到
450才停止,新MC的名称是lk加上I的累加值,深度值也是I累加值。
i = 0;
do {
i = i+1;
duplicateMovieClip("/hslk", "lk"+i, i);
} while (i<450);
onClipEvent
语法: onClipEvent(movieEvent){
statement(s);
}
参数: movieEvent 是一个称作“事件”的触发器。当事件发生时,执行该事
件后面花括号中的语句。
可以为movieEvent 参数指定下面的任何值:
load:影片剪辑一旦被实例化并出现在时间轴中时,即启动此动作;
unload:在从时间轴中删除影片剪辑之后,此动作在第一帧中启动。
enterFrame:以影片帧频不断地触发此动作。
mouseMove:每次移动鼠标时启动此动作。而_xmouse和_ymouse属
性用于确定当前鼠标位置;
mouseDown:当按下鼠标左键时启动此动作;
mouseUp:当释放鼠标左键时启动此动作;
keyDown:当按下某个键时启动此动作,而也可使用 Key.getCode 方
法获取最近按下的键的有关信息;
keyUp:当释放某个键时启动此动作,也可使用 Key.getCode 方法获
取最近按下的键的有关信息;
data: 当在 loadVariables 或 loadMovie 动作中接收数据时启动此动作。
statement(s):发生mouseEvent 时要执行的指令。
说明:事件处理函数;触发为特定影片剪辑实例定义的动作。
示例:下面脚本的意思是,当加载某个MC时,包括来自外部的脚本文件hslk.as,
并运行这些脚本。
onClipEvent (load) {
#include "hslk.as"
}
removeMovieClip
语法: removeMovieClip(target)
参数: target:用duplicateMovieClip创建的影片剪辑实例的目标路径,或者
用MovieClip对象的 attachMovie或duplicateMovieClip方法创建的影
7
片剪辑的实例名。
说明:动作;删除用MC对象的attachMovie 或 duplicateMovieClip方法创建的影
片剪辑实例。
setProperty
语法: setProperty("target",property,value/expression)
参数: target:要设置其属性的影片剪辑实例名称的路径。property:要设置
的属性。value:属性的新文本值。expression:计算结果为属性新值
的公式。
说明:动作;当影片播放时,更改影片剪辑的属性值。
示例:下面脚本的意思是单击按钮时,把名为hslk的 MC的透明度设置为60%:
on (release) {
setProperty("hslk", _alpha, "60");
}
startDrag
语法: startDrag(target,[lock ,left ,top ,right,bottom])
参数: target:要拖动的影片剪辑的目标路径。lock:一个布尔值,指定可拖
动影片剪辑是锁定到鼠标位置中央(true),还是锁定到用户首次点击
该影片剪辑的位置上(false)。
left、top、right、bottom 相对于影片剪辑父级坐标的值,这些坐标指
定该影片剪辑可拖动的矩形范围,以上参数是可选的。
说明:动作;使target 设置的MC在场景中可拖动。一次只能拖动一个影片剪辑。
执行 startDrag 动作后,影片剪辑将保持可拖动状态,直到被 stopDrag 动作明确
停止,或者直到为其他影片剪辑调用了 startDrag动作为止。
示例:下面的效果是某个MC影片当鼠标放在其上时能被拖动,鼠标键抬起时停
止,当然,你必需在MC中建立一个按钮,并在按钮中加入如下脚本:
on (press) {
startDrag(this,true);
}
on (release) {
stopDrag();
}
updateAfterEvent
语法: updateAfterEvent()
参数: 无参数。
说明:动作; 当在onClipEvent 处理函数中调用它时, 或作为传递给setInterval (这
是一种“间隔函数” ,可以更新来自数据库的变量或更新时间显示)的函数或方法的一
部分进行调用时,该动作更新显示(与为影片设置的每秒帧数无关)。如果对
updateAfterEvent 的调用不在 onClipEvent 处理函数中,也不是传递给setInterval
的函数或方法的一部分,则该动作被忽略。
ant0323 2006-4-7 11:25
四、变量
delete
语法: delete reference
参数: reference:要消除的变量或对象的名称。
说明:运算符; 销毁由reference参数指定的对象或变量, 如果该对象被成功删除,
则返回true;否则返回false值。
示例:下面的脚本意思是创建一个Temp对象,然后在你不再需要时删除Temp。
temp = new Object();
temp.name = 'hslk';
delete temp;
set variable
语法: set(variable,expression)
参数: variable:保存 expression 参数值的标识符;expression:分配给变量
的值。
说明:动作;为变量赋值。variable是保存数据的容器。变量可以保存任何类型的
数据(例如,字符串、数字、布尔值、对象或影片剪辑)。每个影片和影片剪辑的
时间轴都有其自己的变量集, 每个变量又都有其自己独立于其他时间轴上的变量
的值。
示例:下面这一句把名称为hslk的MC的原始水平位置记录在变量myx中:
set("myx", getProperty ("hslk", _x ));
然后,在动画播放过程中需要其回复原来位置时可以把 myx再赋予 hslk的_x属
性。
var
语法: var variableName1 [= value1][...,variableNameN [=valueN]]
参数: variableName:标识符;value:分配给变量的值。
说明:动作;用于声明局部变量。如果在函数内声明局部变量,那么变量就是为
该函数定义的,且在该函数调用结束时到期。如果变量不是在块({})内声明的,
但使用call动作执行该动作列表,则该变量为局部变量,且在当前列表结束时到
期。如果变量不是在块中声明的,且不使用call动作执行当前动作列表,则这些
变量不是局部变量。
with
语法: with (object) {
statement(s);
}
参数: object:动作脚本对象或影片剪辑的实例;
statement(s):花括号中包含的动作或一组动作。
说明:动作;允许你使用 object 参数指定一个对象(比如影片剪辑),并使用
statement(s)参数计算对象中的表达式和动作。这个动作相当简捷方便,建议朋友
9
们一定得掌握哦。
示例:下面的示例设置处于主场景中名称为 hslk 的 MC 的_x 和_y 属性,然后播
放头停止在hslk影片夹中的第30帧上。
with (_root.hslk) {
_x = 50;
_y = 100;
gotoAndStop(30);
}
五、条件与循环
break
语法: Break
参数: 无参数。
说明:动作;出现在一个循环(for、for..in、do while 或while 循环)中,或者出现
在与 switch动作内特定 case 语句相关联的语句块中。break 动作可命令 Flash 跳
过循环体的其余部分,停止循环动作,并执行循环语句之后的语句。使用 break
动作可跳出一系列嵌套的循环。
示例:下面的示例使用 break 动作退出一个循环,如果没有该动作,则该循环为
无限循环。
i = 0;
while (true) {
if (i >= 100) {
break;
}
i++;
}
case
语法: case expression: statements
参数: expression:任何表达式;statements:任何语句。
说明:关键字;定义用于switch动作的条件。如果case关键字后的 expression参
数全等于(===)switch动作的 expression参数,则执行statements参数中的语句。
如果在switch语句外部使用case动作,则将产生错误,脚本不能编译。
continue
语法: Continue
参数: 无参数。
说明:动作;出现在几种类型的循环语句中;它在每种类型的循环中的行为方式
各不相同。在while 循环中,使影片跳过循环体的其余部分,并转到循环的顶端
(在该处进行条件测试)。在do while 循环中,可使影片跳过循环体的其余部分,
并转到循环的底端(在该处进行条件测试)。在 for 循环中,可使影片跳过循环体
10
的其余部分,并转而计算 for循环的后表达式(post-expression)。在 for..in循环中,
可使影片跳过循环体的其余部分,并跳回循环的顶端(在该处处理下一个枚举
值)。
default
语法: default: statements
参数: statements:任何语句。
说明:关键字;定义switch动作的默认情况。对于一个给定的switch动作,如果
该 switch 动作的 Expression 参数与 case 关键字后面的任何一个 Expression 参数
都不相等,则执行这些语句。
示例:在下面的示例中,表达式 A与表达式 B 或 D 不相等,所以运行 default 关
键字后面的语句,并把信息发送到“输出”面板。
switch (A) {
case B:
C;
break;
case D:
E;
break;
default:
trace ("没有一个是相同的!");
}
注意,trace指令是向“输出”面板发送信息。
do while
语法: do {
statement(s)
} while (condition)
参数: condition:要计算的条件。statement(s)只要condition参数计算结果为
true就会执行的语句。
说明:动作;执行语句,只要条件为true,就计算循环中的条件。
else
语法: else statement
else {...statement(s)...}
参数: ondition:计算结果为true或 false的表达式。statement(s):如果 if语
句中指定的条件为false,则运行替代语句系列。
说明:动作;指定当if语句中的条件返回false时要运行的语句。
else if
语法: if (condition){
statement(s);
} else if (condition){
11
statement(s);
}
参数: condition:计算结果为 true 或 false 的表达式。statement(s):如果 if
语句中指定的条件为false,则运行替代语句系列。
说明:动作;计算条件,并指定当初始 if 语句中的条件返回 false 时要运行的语
句。 如果else if条件返回true, 则影片运行该条件后面花括号中的语句。 如果else
if条件为 false,则影片跳过花括号中的语句,运行花括号之后的语句。在脚本中
可以使用else if动作创建分支逻辑。
示例:下面的示例使用 else if 动作检查对象的每一边是否都在特定的边界内,
如果对象超出边界,则将其发回并倒转其行进路径
if (result<60) {
grade=”不及格”;
}else if(result<70){
grade=”及格”;
}else if(result<85){
grade=”较好”;
}else if(result<=100){
grade=”优秀”;
}
ant0323 2006-4-7 11:26
for
语法: for(init; condition; next) {
statement(s);
}
参数: init:一个在开始循环序列前要计算的表达式,通常为赋值表达式。
此参数还允许使用Var语句。condition:计算结果为true或 false的表
达式。在每次循环迭代前计算该条件;当条件的计算结果为 false 时
退出循环。next:一个在每次循环迭代后要计算的表达式;通常为使
用递增或递减运算符的赋值表达式。statement(s):在循环体内要执行
的指令。
说明:动作;一种循环结构,首先计算 init(初始化)表达式一次,只要 condition
的计算结果为 true,则按照以下顺序开始循环序列,执行 statement,然后计算
next 表达式。
示例:下面是使用 for 重复执行同一动作的示例。在下面的代码中,for 循环将
从 1 到 100 的数字相加:
var sum = 0;
for (var i=1; i<=100; i++) {
sum = sum + i;
}
for..in
语法: for(variableIterant in object){
statement(s);
}
12
参数: variableIterant:作为迭代变量的变量名,引用数组中对象或元素的每
个属性。object:要重复的对象的名称。statement(s):要为每次迭代
执行的指令。
说明:动作;循环通过数组中对象或元素的属性,并为对象的每个属性执行
statement。
示例:下面的示例使用 for..in 迭代某对象的属性:
myObject = { name:'Tara', age:27, city:'San Francisco' };
for (name in myObject) {
trace ("myObject."+ name + " = " + myObject[name]);
}
此示例的输出如下所示:
myObject.name = Tara
myObject.age = 27
myObject.city = San Francisco
if
语法: if(condition) {
statement(s);
}
参数: condition:计算结果为true或 false的表达式。statement(s):如果或当
条件的计算结果为true时要执行的指令。
说明:动作;对条件进行计算以确定影片中的下一步动作。如果条件为 true,则
Flash将运行条件后面花括号({})内的语句。如果条件为 false,则 Flash跳过花括
号内的语句,运行花括号后面的语句。使用if动作可在脚本中创建分支逻辑。
示例:在下面的示例中,括号内的条件对变量 name 进行计算以查看其是否具有
文本值 "Erica"。如果有,则运行花括号内的play()动作。
if(name == "Erica"){
play();
}
switch
语法: switch (expression){
caseClause:
[defaultClause:]
}
参数: expression:任意表达式。caseClause:一个 Case 关键字,其后跟表
达式、冒号和一组语句,如果在使用全等的情况下,此处的表达式与
switch expression参数相匹配,则执行这组语句。defaultClause:一个
default 关键字,其后跟着如果这些 Case 表达式都不与 switch
expression参数全等匹配时要执行的语句。
说明:动作;创建动作脚本语句的分支结构。像If动作一样,Switch 动作测试一
个条件,并在条件返回true值时执行语句。
示例:在下面的示例中,如果number参数的计算结果为1,则执行case 1后面的
trace() 动作,如果 number 参数的计算结果为 2,则执行 case 2 后面的 trace()动
13
作,依此类推。如果case表达式与 number参数都不匹配,则执行default 关键字
后面的trace()动作。
switch (number) {
case 1:
trace ("case 1 tested true");
break;
case 2:
trace ("case 2 tested true");
break;
case 3:
trace ("case 3 tested true");
break;
default:
trace ("no case tested true")
}
while
语法: while(condition) {
statement(s);
}
参数: condition:每次执行 while 动作时都要重新计算的表达式。如果该语
句的计算结果为true,则运行statement(s)。statement(s):条件的计算
结果为true时要执行的代码。
说明:动作;测试表达式,只要该表达式为 true,就重复运行循环中的语句或语
句序列。 在运行该语句块之前,首先测试 condition;如果测试返回 true,则运
行该语句块。如果该条件为 false,则跳过该语句块,并执行 while 动作语句块
之后的第一条语句。
通常当计数器变量小于某指定值时,使用循环执行动作。 在每个循环的结
尾递增计数器的值,直到达到指定值为止。此时,condition不再为true,因此循
环结束。
六、自定义函数
call
语法: call(frame)
}
参数: frame:时间轴中帧的标签或编号。
说明:动作;执行被调用帧中的脚本,而不将播放头移动到该帧。一旦执行完该
脚本,局部变量将不存在。
function
语法: function ([parameter0, parameter1,...parameterN]){
14
statement(s)
}
参数: functionname:新函数的名称。Parameter:一个标识符,表示要传递
给函数的参数。这些参数是可选的。statement(s)为 function的函数体
定义的任何动作脚本指令。
说明:您定义的用来执行特定任务的一组语句。可以在影片的一个地方“声明”
或定义函数, 然后从影片的其他脚本调用它。 定义函数时, 还可以为其指定参数。
参数是函数要对其进行操作的值的占位符。每次调用函数时,可以向其传递不同
的参数。这使您可以在不同场合重复使用一个函数。
示例: 下面的示例定义函数sqr, 该函数接受一个参数并返回该参数的square(x*x)。
如果在同一脚本中声明和使用该函数,则可以先使用该函数,后声明它。
y=sqr(3);
function sqr(x) {
return x*x;
}
return
语法: return[expression]
return
参数: expression:要作为函数值计算并返回的字符串、数字、数组或对象。
此参数是可选的。返回值:如果提供了expression参数,则返回计算
的结果。
说明:动作;指定由函数返回的值。return 动作计算 expression 并将结果作为它
在其中执行的函数的值返回。return动作导致函数停止运行,并用返回值代替函
数。如果单独使用return语句,它返回null。
示例:下面的示例在sum() 函数体内使用return 动作,以返回三个参数相加后的
值。下一行代码调用sum()并将返回值赋予变量newvalue:
function sum(a, b, c){
return a + b + c;
}
newvalue = sum(4, 32, 78);
trace(newvalue);
注意,trace指令是向“输出”面板发送信息,这里将看到114。
Flash没有 ActionScript(AS)也能称为动
画,而 Flash有了 AS 更是动画,AS 赋予动画
那种音乐艺术的感受:有时抑扬顿挫,有时豪
放激越,有时娓娓抒情,有时出神入化,它的
交互特性更是手工无法替代的。
学 AS 动画,从最简单的开始……