第一部分:基础入门
什么是 ActionScript 3.0?
ActionScript 3.0 (简称 AS3) 是一种基于 ECMAScript 的面向对象编程语言,它专为 Adobe Flash Player 设计,让你能够控制 Flash 影片中的元素(如图形、按钮、文本),实现复杂的交互逻辑。

AS2 vs AS3 的核心区别 (非常重要!):
- 编程范式: AS2 是基于过程的,而 AS3 是纯面向对象的,这意味着一切皆对象,代码组织更清晰、更强大。
- 性能: AS3 运行速度比 AS2 快 10 倍以上,因为它采用了新的虚拟机 AVM2。
- 事件处理: AS3 引入了事件监听器 模式,取代了 AS2 的
on()函数,这是处理用户交互的核心。 - 显示列表: AS3 引入了显示列表 的概念,所有可见元素(影片剪辑、按钮等)都以树状结构组织,管理起来非常直观。
- 类型检查: AS3 是强类型语言,你必须为变量、函数参数等指定数据类型(如
String,Number,int),这能大大减少运行时错误。
第一个 AS3 程序:Hello World
目标: 在舞台上显示 "Hello, World!"。
步骤:
-
创建 FLA 文件: 打开 Adobe Animate (或旧版的 Adobe Flash Professional),创建一个新的 ActionScript 3.0 文档。
(图片来源网络,侵删) -
打开动作面板: 按
F9键,或者点击菜单栏的窗口->动作。 -
编写代码: 在动作面板中,输入以下代码:
// 定义一个字符串变量 var myMessage:String = "Hello, World!"; // 创建一个文本字段 var myTextField:TextField = new TextField(); // 设置文本字段的属性 myTextField.text = myMessage; // 显示文本内容 myTextField.x = 100; // 设置 X 坐标 myTextField.y = 100; // 设置 Y 坐标 myTextField.textColor = 0x0000FF; // 设置文本颜色为蓝色 // 将文本字段添加到舞台(显示列表) addChild(myTextField);
-
测试影片: 按
Ctrl + Enter(Windows) 或Cmd + Enter(Mac)。
代码解释:

var ... : ... = ...;:这是声明变量的标准语法,var是关键字,myMessage是变量名,String是数据类型, 是赋值。new TextField():创建一个TextField(文本字段)类的实例,也就是一个对象。myTextField.text:访问myTextField对象的text属性。addChild():这是一个核心函数,用于将一个显示对象(如文本字段、影片剪辑)添加到舞台上,使其可见。
核心概念
1 变量与数据类型
变量是存储数据的容器,AS3 是强类型语言,声明变量时最好指定类型。
| 数据类型 | 描述 | 示例 |
|---|---|---|
String |
文本字符串 | var name:String = "张三"; |
Number |
浮点数(带小数) | var price:Number = 19.99; |
int |
整数(32位) | var count:int = 100; |
uint |
无符号整数(32位,不能为负) | var color:uint = 0xFF0000; |
Boolean |
布尔值,true 或 false |
var isVisible:Boolean = true; |
Array |
数组,存储一组数据 | var fruits:Array = ["apple", "banana"]; |
Object |
通用对象,可以存储键值对 | var user:Object = {name:"李四", age:25}; |
2 显示列表
想象一下一个家庭树,舞台是根,所有可见的元素都是它的孩子。
- Stage (舞台): 顶级容器,所有最终可见内容的最终归宿。
- DisplayObject (显示对象): 所有可视元素的基类。
Shape,Sprite,MovieClip,TextField。 - DisplayObjectContainer (显示对象容器): 可以包含其他显示对象的容器。
Stage,Sprite,MovieClip。
常用操作:
addChild(child:DisplayObject): 添加一个子对象。removeChild(child:DisplayObject): 移除一个子对象。getChildAt(index:int): 通过索引获取子对象。getChildByName(name:String): 通过实例名获取子对象。
3 事件与事件监听器
这是 AS3 交互的灵魂,用户点击鼠标、按下键盘、影片加载完成等,都会“触发”一个事件。
基本模式:
- 创建事件监听器: 告诉一个对象(比如按钮):“嘿,当你被点击时,请执行这个函数。”
- 定义事件处理函数: 编写一个函数,描述当事件发生时具体要做什么。
示例:给按钮添加点击事件
-
在舞台上拖入一个 Button 组件,或者自己画一个图形,按
F8将其转换为 按钮 或 影片剪辑,在属性面板中,给它一个实例名,myButton。 -
在时间轴的第1帧(或专门的 Actions 图层)打开动作面板,输入以下代码:
// 方法一:使用函数字面量(推荐,代码简洁) myButton.addEventListener(MouseEvent.CLICK, onButtonClick); // 方法二:定义一个独立的函数(更清晰,适合复杂逻辑) // myButton.addEventListener(MouseEvent.CLICK, onButtonClick); // --- 事件处理函数 --- function onButtonClick(event:MouseEvent):void { trace("按钮被点击了!"); // 在输出面板打印信息 // 可以在这里执行任何操作,比如跳转场景、播放动画等 } // 如果使用方法二,函数需要这样定义: /* function onButtonClick(event:MouseEvent):void { trace("按钮被点击了!"); } */
代码解释:
addEventListener(): 添加事件监听器。MouseEvent.CLICK: 事件类型,表示“鼠标点击”。onButtonClick: 事件处理函数的名称。event:MouseEvent: 事件处理函数必须有一个参数,这个参数会传递一个事件对象,包含了事件的相关信息(如点击的坐标、按下的键等)。void: 表示这个函数没有返回值。
使用时间轴代码与外部类文件
有两种主要的编写 AS3 代码的方式:
-
时间轴代码:
- 位置: 直接写在 FLA 文件时间轴的帧上(通常是第1帧)。
- 优点: 简单直接,适合小型项目、原型或快速测试。
- 缺点: 代码难以复用,项目一大就会变得混乱。
-
外部类文件:
- 位置: 创建一个独立的
.as文件(Main.as),然后在 FLA 文件的“发布设置”中指定这个类作为文档类。 - 优点: 面向对象编程的标准做法,代码结构清晰、易于维护、复用性强,是开发大型应用和游戏的首选。
- 位置: 创建一个独立的
示例:创建外部类文件
-
创建 .as 文件:
-
新建一个文本文档,命名为
Main.as。 -
将其保存在与你的
.fla文件同一目录下。 -
在
Main.as中输入以下代码:// 导入必要的包 import flash.display.MovieClip; import flash.events.MouseEvent; // Main 类必须继承自 MovieClip 或 Sprite public class Main extends MovieClip { // 构造函数,当类被创建时自动执行 public function Main() { // trace("Main 类已加载!"); // 假设舞台上的按钮实例名也是 myButton myButton.addEventListener(MouseEvent.CLICK, onButtonClick); } // 事件处理函数 private function onButtonClick(event:MouseEvent):void { trace("通过外部类实现的按钮点击!"); } }
-
-
在 FLA 中设置文档类:
- 打开你的
.fla文件。 - 在属性面板中,找到“类”这个输入框。
- 输入你的类名:
Main。 - 注意: 这里的类名不需要带
.as后缀。
- 打开你的
-
测试: 按
Ctrl + Enter运行,你的逻辑完全被封装在了外部的Main.as文件中。
第二部分:进阶学习
掌握了基础后,你可以开始探索更强大的功能。
影片剪辑 的控制
影片剪辑是 AS3 中最重要的显示对象,它有自己的时间轴。
- 实例名: 在舞台上选中一个影片剪辑,在属性面板给它一个实例名(如
player,enemy)。 - 控制播放:
my_mc.play(); // 播放my_mc.stop(); // 停止在当前帧my_mc.gotoAndPlay(5); // 跳转到第5帧并播放my_mc.gotoAndStop("label_name"); // 跳转到名为 "label_name" 的帧并停止
- 访问属性:
my_mc.x = 50; // 设置 X 坐标my_mc.rotation = 45; // 旋转45度my_mc.alpha = 0.5; // 设置透明度 (0-1)my_mc.scaleX = 1.5; // 设置 X 轴缩放
动态创建对象
你不仅可以在舞台上放置对象,还可以在代码中动态创建它们。
// 1. 导入包
import flash.display.MovieClip;
// 2. 创建一个循环,在舞台上创建5个圆圈
for (var i:int = 0; i < 5; i++) {
// 创建一个影片剪辑实例(假设库中有一个名为 "Circle" 的链接类)
var circle:MovieClip = new Circle();
// 设置位置
circle.x = 50 + i * 80;
circle.y = 200;
// 将新创建的圆圈添加到舞台
addChild(circle);
}
注意: 要让 new Circle() 生效,你需要在 FLA 文件的库中,右键点击一个影片剪辑,选择“链接...”,勾选“为 ActionScript 导出”,并在“类”中输入 Circle。
常用类库
flash.display: 核心显示类,如Sprite,MovieClip,Shape,Bitmap。flash.events: 事件类,如Event,MouseEvent,KeyboardEvent,TimerEvent。flash.utils: 工具类,如getTimer()(获取运行时间),Timer(定时器)。flash.geom: 几何类,如Point,Rectangle,Matrix(用于变形)。flash.net: 网络类,如URLLoader(加载外部文本/图片/数据),URLRequest。
第三部分:资源与学习路径
官方资源
- Adobe Animate 官方文档: https://helpx.adobe.com/animate/user-guide.html (包含最新的 AS3 参考)
- Adobe ActionScript 3.0 参考指南: https://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/ (最权威的 API 文档)
社区与教程网站
- Kirupa: https://www.kirupa.com/ (非常经典的 AS3 教程网站,内容详实,适合初学者)
- Flash and ActionScript Forums (Adobe Community): https://community.adobe.com/t5/flash/ct-p/flash (官方论坛,可以提问和交流)
- GitHub: 搜索 "ActionScript 3" 或 "AS3",可以找到大量开源项目和示例代码。
学习路径建议
- 打牢基础: 理解变量、数据类型、显示列表、事件监听器,这是重中之重。
- 掌握时间轴: 学会用代码控制影片剪辑的播放和属性。
- 拥抱外部类: 开始将所有代码移到
.as文件中,学习Document Class的概念。 - 学习常用类: 逐一攻克
Timer,URLLoader,Sound等常用类。 - 实践出真知:
- 小游戏: 从简单的“打地鼠”、“贪吃蛇”开始。
- 交互式动画: 制作一个可以由用户控制的动画。
- 数据可视化: 加载外部数据(如 XML, JSON)并用图表展示出来。
AS3 是一门非常经典且功能强大的语言,虽然现在有更现代的替代方案(如 Haxe, TypeScript),但学习 AS3 能为你打下坚实的面向对象编程和交互式开发基础,祝你学习顺利!
