标题：AS动作脚本
简述
flash中用到的脚本语言，在flash中十分重要，用它可以实现flash动作的实现
定义
AS是ActionScript的缩写 
ActionScript 动作脚本 是遵循 ECMAscript第四版 的 Adobe Flash Player 运行时环境的编程语言。它在 Flash Player内容和应用程序中实现交互性、数据处理、以及其他功能。
ActionScript 是由 Flash Player 中的 ActionScript虚拟机（AVM）来执行。
ActionScript代码通常被编译成“字节码格式”。
ActionScript 的主要 IDE 是 Adobe 公司的 Flash 和 Flex，最新版本 CS3（即flash9.0 和 flex3.0），2007年4月上市。
发展
从macromedia大刀阔斧对As1.0进行改革到AS2.0，这一段过程看上去还算长一些，从flashmx到flash mx2004到flash 7.2再到flash8. 它们的核心actionscript都是as2.0.在flash8刚刚发布不长时间，macromedia又紧罗密鼓的推出了flash9预览版，大家都已经知道了Adobe发布的预览版可以对AS3.0进行编译，而As3.0经过测试它的速度可以说要比之前的as2.0快10倍．拿着as3.0与As2.0相对比，虽然有些东西看着面熟，但它看上去就象是重写的一种新语言一样．还有随之推出的adobe的Flex 2.0 builder. Flex sdk.让许多人一时不知所措
· Flash Player 2第一个支持脚本的版本，包括控制时间轴的gotoAndPlay,gotoAndStop,nextFrame和nextScene等动作。
· Flash Player 3增强了载入外部SWF文件的基本脚本支持（loadMovie）。
· Flash Player 4第一个完全实现脚本功能（称为动作）的播放器。这些脚本拥有简练的语法和对循环，条件，变量和其它基本语言结构的支持。
· Flash Player 5第一个拥有真正意义上的ActionScript的版本。依据ECMAScript并采用基于原型编程，并允许完全的 过程序编程和面向对象编程。
· Flash Player 6增加了事件处理模型，并且支持switch。
· Flash Player 7Flash Player 7 提供一些新特性如支持CSS显示文本和增强显示效果。Macromedia Flash编译器和Flash Player 7同时支持基于ECMAScript 4 Netscape Proposal的类编程语言ActionScript 2.0。不过ActionScript 2.0能交叉编译成ActionScript 1.0的字节码，因此它能运行于Flash Player 6。
· Flash Player 8增加用于运行时图象数据控制和文件上传的新类库及APIs，ActionScript 2.0功能更为完善。
· Flash Player 8.5（计划于2006春发布release版本，currently in public beta）：增加ActionScript 3.0和一个称为AVM2(ActionScript Virtual Machine 2）新的虚拟机，它可以与前版本AVM1共存以便支持旧内容。增强性能是该版本的主要目标。
· Flash Player 92007发表，这是adobe收购Macromedia后的第一个版本，并且也是Mac OS X上第一个Universal版本的Flash Player。
基本记法
ActionScript 2.0 
下面打印Hello World。值得注意的是这只能在整合环境下执行，因为trace函式只有支持整合环境。
trace("Hello world!"); 
下面代码利用onMouseMove事件当鼠标移动时输出现行鼠标位置。同样的这只有在整合环境下执行。
onMouseMove = function () { 
trace("X: "+_root._xmouse); 
trace("Y: "+_root._ymouse); 
}; 
这个较先进的范例创造一个包括数字与字符串的数组，并利用原形函式（prototype function）与函式递归给变量名num指定一个数，给变量str指定一个字符串。然后，利用MovieClip应用程序接口，文字区域被显示在屏幕上，文字区域里头写入了变量值。
var my_Array:Array = new Array("Hello","ActionScript",3,7,11,"Flash"); 
Array.prototype.pickNumber = function():Number { 
var rand:Number = random(this.length); 
return (typeof (this[rand]) == "number") this[rand] : this.pickNumber(); 
}; 
Array.prototype.pickString = function():String { 
var rand:Number = random(this.length); 
return (typeof (this[rand]) == "string") this[rand] : this.pickString(); 
}; 
var num:Number = my_Array.pickNumber(); 
var str:String = my_Array.pickString(); 
_root.createTextField("txt",1,10,10,530,390）； 
txt.text = "Array = "+my_Array+"\nRandom Number = "+num+"\nRandom String = "+str; 
ActionScript 3.0 
下面先进的Hello World程序目前需要在Flex 2.0公开Alpha测试版整合环境中编译。
package { 
import flash.text.TextField; 
import flash.display.MovieClip; 
import flash.filters.DropShadowFilter; 
public class HelloWorld extends MovieClip { 
public function HelloWorld() { 
var shad:DropShadowFilter = new DropShadowFilter（2,45,0x000000,25,3,3,2,2）； 
var txt:TextField = new TextField(); 
txt.textColor = 0xFFFFFF; 
txt.filters = [shad]; 
txt.width = 120; 
txt.x = Math.random()*300; 
txt.y = Math.random()*300; 
txt.selectable = false; 
txt.text = "Hello World! ["+Math.round(txt.x)+","+Math.round(txt.y)+"]"; 
addChild(txt); 
//-----ActionScript3.0----------------- //as3.0最重要的概念就是在效能方面的增进，平时所加入的任何事件都可以被监听或从内存中移除 //以下例子就是监听与移除内存占用，这是as3.0最重要的基础概念 
bt1.addEventListener(MouseEvent.CLICK,bt1_click); 
function bt1_click(e:MouseEvent):void{ //触发的事件内容； } 
//该按纽监听不需要时则remove掉，增加效能 bt1.removeEventListener(MouseEvent.CLICK,bt1_click);
Flash脚本语言
影片控制语法：gotoAndPlay(Scene,Frame); 将播放头跳转到场景中指定的帧并从该帧开始播放，
标签范例：gotoAndPlay("Scene 1",1）； 
gotoAndStop：将播放头跳转到场景中指定的帧（标签）并停止播放 
NextFrame ：下一帧 
goto 
PreviousFrame：前一帧 
nextscene：下一个场景 
previousscene ：前一个场景 
FrameLabel：关键帧中定义的标签位置 
语法：on (mouseEvent); 
范例：on (press) { 
指定触发动作的鼠标事件或按键 
startDrag(""); 
} 
MouseEvent 可分为以下几类。
Press：鼠标指针在按钮上，并按下按钮 
Release：鼠标指针在按钮上，按下后放开按钮 
on Release Outside：当鼠标指针滑到按钮上时按下鼠标按钮，然后在释放鼠标按钮前滑出 
此按钮区域 
Roll Over：鼠标指针滑过按钮 
Roll Out：鼠标指针滑出按钮外 
Drag Over：当鼠标指针滑到按钮上时按下鼠标按钮，然后滑出该按钮区域，接着滑回 
到该按钮上 
Drag Out：当鼠标指针滑到按钮上时按下鼠标按钮，然后滑出此按钮区域 
Key Press：（“key”）按下指定的键盘按键 
play 语法：play(); 开始播放影片或继续往前播放 
stop 语法：stop(); 停止播放影片 
stopAllSounds 语法：stopAllSounds; 停止所有正在播放中的音乐文件
浏览器/网络语法：fscommand (command,parameters); 使SWF 文件能够与Flash Player 或 
fscommand 嵌入Flash Player 的程序（如 Web 浏览器
）进行信息传递，范例：fscommand ("fullscreen","true"); 
续表 
Flash Player 的指令。
Fullscreen (true/false）：以全屏方式打开播放器 
Allowscale (true/false）：允许影片放大或缩小 
Showmenu (true/false）：显示单击鼠标右键时的菜单 
Trapallkeys (true/false）：传送所有按键事件至onClipEvent 
Exec (true/false）：执行一项内部指令 
Quit：关闭播放器 
语法：loadVariables (URL,level/target,Variables); 
从外部文件中读取数据，例如文本文件，或是CGI、ASP 或PHP 脚本产生的文本。然后在影片内设置变量值 
范例：on(release){ 
loadVariables loadVariablesNum ("MX.txt",0); } 
语法：getURL (URL,Window,Variables); 
打开网页的相对或绝对地址，与超级链接的作用是相同的，可从链接网页URL 中加载影片、JPG，选择性地传递变量，加载到当前动画影片中。
getURL 范例：getURL ("(网址）","_blank"); 
语法：loadMovieNum (URL,level/target,Variables) 
loadMovie 
范例：loadMovieNum ("picture.jpg",0) 
unloadMovie 语法：unloadMovieNum (level/target) 取消已载入的动画影片
影片剪辑控制当 SWF 文件正在播放时，创建一个 
影片剪辑的实例。无论播放头在原始影片剪辑中处于什么位置，在重复的影片剪辑中，播放头始终从第 1 帧 
开始 
语法：duplicateMovieClip (target,new name,depth); 
duplicateMovieClip 范例：duplicateMovieClip ("/game","new game",2）； 
removeMovieClip 语法：removeMovieClip ("target"); 删除指定的影片剪辑 
可用鼠标拖动已定义实体名称的影 片剪辑，一次只能拖动一个。一旦 执行，该影片剪辑保持可拖 动状态，直到用stopDrag 明确停止拖动为止，或是对另一个影片剪辑做 startDrag 的动作命令 
语法：startDrag (target,lock,[left,top,right,bottom]); 
范例：on (press) { startDrag startDrag 
startDrag ("/happy",true,0,350,210）； 
startDrag 的动作命令 
语法：stopDrag (); 
范例：on (release) 
stopDrag 停止当前的拖动操作 
stopDrag (); 
续表 
语法：onClipEvent (movieEvent) {} 
范例：onClipEvent (load) { 事件处理函数：触发去执行那些指派 
gotoAndStop ⑶ 给一个影片剪辑的动作命令 
MovieEvent 可分为以下几类。
Load：载入动画影片 
Unload：删除动画影片 
onClipEvent EnterFrame：进入每一帧（都会启动action） 
MouseMove：每次移动鼠标时启动此动作 
MouseDown：按住鼠标左键 
MouseUp：放开鼠标左键 
KeyDown：按住键盘的一个按键，使用Key.getCode 去读取最后被按下的按键 
KeyUp：放开键盘的一个按键，使用Key.getCode 去读取最后被放开的按键 
Data ：在 loadVariables() 或 loadMovie() 动作中接收到数据时启动该动作。当与 
loadVariables() 动作一起指定时，data 事件只在加载最后一个变量时发生一次 
当影片播放时，更改影片剪辑的属 
语法：setProperty (target,property,value) 
setProperty 性值，如Alpha 、Width、Visible、 
范例：setProperty ("happy",_alpha= 30）； Rotation 等 
在指定的ClipEvent 事件触发后，刷 
updateAfterEvent 语法：updateAfterEvent() 新屏幕显示，可以避免刷新网页时的 
屏幕闪烁
变量语法：delete (reference) 
范例：account = new Object();
account.balance = 5000; 
delete account; 
设置变量的值，可运用【运算法】的 
方式设置其为字符串或数值。和大多 
语法：variable = value 数的程序语言一样，设置变量名称 
set variable 
范例：x= random⒂ + 6; 时，变量名称的第一个字需为英文而 
不能是数字，而在Flash 中变量是没 
有大小写之分 
语法：var variableName 
范例：var x; 
var y = 1; 声明变量 
var z = 3,w = 4; 
var s,t,u = z; 
语法：with (object) {statement} 
with 范例：with (_root.apple) { 使用with 控制影片剪辑 
gotoAndStop ⑶；
判断条件/循环语法：break; 
范例：var i = 0; 
while (true) { 命令Flash 跳过循环体的其余部分， 
if (i >= 100） { 停止循环动作，并执行循环语句之后 
break; 的语句 
出现在几种循环类型中，会先跳过循 环里的其余部分再执行：在while 循环内，会回到循环顶端再 
度测试条件。
continue 语法：continue; 
在do while 里会到循环底部测试条件。
在for 内，会跳过循环的判断位置。
在for...in 内，会回到循环顶端，处理 
下一个枚举值 
执行语句，然后只要条件为 true，就 
do while 语法：do {statement;} while (condition); 
计算循环中的条件 
当if 语句的条件返回false 时，就执 
else 语法：else {statement;} 
行要运行的语句 
先判断init （初始值）一次，然后开始 
做循环，只要condition （条件）的计 
for 语法：for (init; condition; next) {statement} 
算结果是true，就执行要运行的语句， 
然后再重新判断 
语法：if (condition) {statement;} 
范例：if (mx = 5）{ 当if 的condition 条件式为true 时， 
if 
play(); 就执行要运行的语句 
} 
计算条件，如果条件计算结果为 
while 语法：while (condition) {statement;} true，则在循环返回以再次计算条件 
之前执行一条语句或一系列语句
打印打印指定影片剪辑的所有Frame，若 只想打印特定几页时，请在要打印的 Frame 加上Frame Lable：#print 
语法：print (target,method); 
范例：print ("fish","bmovie"); 
Method 可分为以下3 种：
Bmovie ：指明以电影的边界区域（bounding area）作为打印区域。可以在编写环境 
（authoring）中，在那几个帧附上标签：#b。
Bmax：可指定这个混合各个边界区域的参数，来作为打印范围。
Bframe：缩放每格的对象大小，来填满打印的页面 
7．自定义函数 
在被调用帧中执行脚本，而不将播放 头移动到该帧 
call 语法：call (frame) 
语法：function functionname ([parameters]) 
{statement } 
function 范例：function Circle(radius) { 自定义函数 
this.radius = radius; 
} 
method 语法：object.method = function ([parameters]) { }; 自定义对象的方法 
语法：return [expression]; 指定函数返回一个值，如单独使用 
return 范例：function sum (a,b,c) { return 或函数循环执行时，没有这个 
return a + b + c; 
命令，则函数返回null 
} 
8．各种动作 
在测试模式下，计算表达式并在 
trace 语法：trace (expression); 【输出】面板中显示结果，适用于 
侦错 
在Actions 中加上批注说明文字，以 
语法：// comment 避免Actions 太混杂难以理解，此功 
comment 
范例：// 这是一个计数器的判断式 能对于往后的维护工作，甚至是程序 
二次开发都相当有帮助 
（） 范例：gotoAndPlay("Scene 1"1） 范围 
"" 范例：tellTarget("/game") 字符串 
1．数学运算符 
+ 加 
范例：a = 10 ; b = 5 
e = a + b // e = 15 
- 减 
c = a - b // c = 5 
* 乘 
g = a * b // g = 50 
/ 除 
h = a/b // h = 2 
% A/B 的余数 
i = a % b // i = 0 
2．比较运算符 
= 等于 
范例：a = 50; b = 30; c = 20 
< 小于 
b < a 
> 大于 
a > c 
<= 小于等于 
if (c <= b) 
>= 大于等于 
if (a >= c) 
！= 不等于 
if (a != b) 
语法：escape(expression) 
范例：k = escape("Happy New Year"); 将参数转换为字符串，并以 URL 编 
escape trace(k) 码格式对其进行编码 
结果：Happy%20New%20Year 
语法：eval(expression) 
范例：on (release) { 
x = “3”； 按照名称访问变量、属性、对象或影 
eval 
trace (eval （“x”）； 片剪辑，返回该变量或属性的值 
} 
结果：3 
语法：getProperty(instancename,property) 
getProperty 返回指定属性的值 
范例：getPrperty(_root.fish,_x) 
返回自SWF 文件开始播放时起已经 
getTimer 语法：getTimer() 
过的毫秒数 
返回一个包含Flash Player 版本与平 
台信息的字符串，此函数在 
getVersion 语法：getVersion() 
Test-movie Mode （测试电影模式）不 
会执行 
返回一个包含Movie Clip 对象的目 
targetPath 语法：targetpath(movieClipObject) 
标路径字符串 
语法：unescape(x) 
范例：k = unescape("Happy%20 New%20Year"); 将 URL 编码格式的字符串转换成 
unescape trace(k) ASCⅡ 字符格式 
结果：Happy New Year 
1．转换函数 
Boolean 语法：Boolean (expression) 转换指定的参数到布尔值类型 
Number 语法：Number (expression) 转换指定的参数到数字类型 
转换指定的参数到字符串类型 
Actions 语法/范例 说明 
_alpha 
语法：instancename. _alpha=value; 
范例：kewpie._alpha=30; 
设置影片剪辑的透明值。有效值是0 
（全透明）到100（不透明） 
_visible 
语法：instancename._visible,"boolean"; 
范例：apple.visible = 1 
决定instancename 参数指定的影片 
是否看得见 
_target 语法：instancename._target 获取影片剪辑的目标路径 
_rotation 
语法：instancename._rotation; 
范例：setProperty ("movieclip" _rotation=30）； 
设置影片剪辑的旋转角度 
_name 
语法：instancename._name 
范例：setProperty("movieclip" _name,"string"); 
获取影片剪辑的实例名称 
_framesloaded 
语法：_framesloaded = x; 
范例：happy._framesloaded = 25; 
确定特定帧及其前面所有帧的内容 
是否已经加载，并且是否可在浏览 
器本地使用。参数：x 为时间轴上的 
帧数 
_droptarget 
语法：myMovieClip._droptarget 
范例：if (happy._droptarget == root.trash) { 
happy._visible = false; 
} 
返回该影片剪辑的绝对路径 
_currentframe 
语法：_currentframe; 
范例：gotoAndStop (_currentframe+5） 
结果：引导影片前进 5 格 
获取影片剪辑的当前帧 
_totalframes 
语法：_totalframes; 
范例：if (_currentframe=_totalframes) 
获取影片剪辑的总帧数 
_quality 语法：_quality = x; 
电影的质量，x 值包括低（low）、 
中等（medium）、高（high）或最 
好（best） 
_focusrect 语法：_focusrect =Boolean 当按Tab 键浏览时，按钮上是否有个 
黄色的边框出现 
_soundbuftime 
语法：instancename._soundbuftime 
范例：setProperty ("happy "_soundbuftime,"5"); 
指定在声音开始进入流之前，预先缓 
冲的秒数 
_url 
语法：instancename._url; 
范例：setProperty ("happy" _url,"(网址）" 
读取网址（URL）位置的影片剪辑 
String 语法：String (expression) 参数：expression 要被转换成字符串 
的数字、布尔式或表达式 
2．数学函数 
判断数据内容是否为数值，如果不是 
isNaN 语法：isNaN (expression) 
数值则返回true 
将字符串转换为浮点数，直到此函数 
parseFloat 语法：parseFloat(string) 
遇到不是初始数字一部分的字符 
将字符串转换成整数，并进一步设置 
parseInt 语法：parseInt(expression,[radix]) 
数值的进制 
设置影片剪辑的x 坐标，左上角默认 
_x 语法：instancename._x 
为（0,0） 
_y 语法：instancename._y 设置影片剪辑的y 坐标 
语法：instancename._xmouse 
_xmouse 获取鼠标位置的x 坐标 
范例：happy._xmouse = 50 
语法：instancename._ymouse 
_ymouse 获取鼠标位置的y 坐标 
范例：happy._ymouse = 50; 
语法：instancename._xscale 从注册点开始应用的水平缩放比例， 
_xscale 
范例：setProperty ("movieclip"_xscale,"70"); 以百分比表示。默认注册点为（0,0） 
语法：instancename._yscale 从注册点开始应用的垂直缩放比例， 
_yscale 
范例：setProperty ("movieclip"_yscale,"60"); 以百分比表示。默认注册点为 (0,0) 
语法：instancename._width = value; 
_width 设置影片剪辑的宽度 
范例：setProperty ("movieclip",_width,"80"); 
语法：instancename._height= value; 
_height 设置影片剪辑的高度 
范例：setProperty ("movieclip",_height,"50") 
五、对象-核心-Date 
Actions 语法/范例 说明 
new Date 
（构造函数） 
语法：new Date(year,month,date,hour,min,sec,ms); 
范例：now = new Date(); 
trace(now) 
结果：Thu Mar 7 16:01:20 GMT+0800 2001 
创建Date 对象 
getDate 
语法：mydate.getdate(); 
范例：now = new Date(); 
mydate = now.getDate() 
trace (mydate); 
按照本地时间返回指定的 Date 对 
象中表示月中某天的值（1 到 31 之 
间的整数） 
getDay 
语法：mydate.getday(); 
范例：now = new Date(); 
myday = now.getDay() 
trace (myday); 
按照本地时间返回指定的 Date 对 
象中表示周几的值（0 代表星期日， 
1 代表星期一，以此类推） 
getFullYear 
语法：mydate.getfullyear(); 
范例：now = new Date(); 
myfullyear = now.getfullyear() 
trace (myfullyear); 
按照本地时间返回指定的 Date 对 
象中的完整年份值（一个 4 位数， 
如2002） 
getHours 
语法：mydate.gethours(); 
范例：now = new Date(); 
myhours = now.gethours() 
trace (myhours); 
按照本地时间返回指定的 Date 对 
象中的小时值（0 到 23 之间的 
整数） 
getMinutes 
语法：mydate.getminutes(); 
范例：now = new Date(); 
myminutes = now.getminutes() 
trace (myminutes); 
按照本地时间返回指定的 Date 对 
象中的分钟值（0 到 59 之间的 
整数） 
getMonth 
语法：mydate.getmonth(); 
范例：now = new Date(); 
mymonth = now.getmonth() 
trace (mymonth); 
按照本地时间返回指定的 Date 对 
象中的月份值（0 代表一月，1 代表 
二月，以此类推） 
getSeconds 
语法：mydate.getsecondes(); 
范例：now = new Date(); 
myseconds = now.getseconds() 
trace (myseconds); 
按照本地时间返回指定的 Date 对 
象中的秒钟值（0 到 59 之间的 
整数） 
toString 语法：mydate.tostring(); 将日期转换成可读的字符串值