ActionScript 3.0 教程
前言:为什么学习 ActionScript 3.0?
ActionScript 3.0 是一种功能强大的面向对象的编程语言,主要用于 Adobe Flash Player 和 Adobe AIR 的开发,尽管如今 HTML5 和 JavaScript 已经成为 Web 动画的主流,但 AS3 在以下领域依然有其不可替代的价值:

- 游戏开发:拥有出色的性能和强大的显示列表,非常适合制作 2D 游戏。
- 富互联网应用:可以创建复杂的、交互性强的桌面和网络应用程序。
- 遗留项目维护:维护和升级大量基于 Flash 的旧项目。
- 理解编程基础:AS3 的严格语法和面向对象特性是学习其他现代编程语言(如 Java, C#)的绝佳跳板。
第一部分:基础知识
什么是 ActionScript 3.0?
AS3 是一种遵循 ECMAScript 标准的脚本语言,与之前的版本(尤其是 AS2)相比,AS3 是一次革命性的飞跃:
- 性能提升:引入了新的虚拟机 AVM2,性能是 AVM1 的 10 倍以上。
- 严格类型检查:变量和函数参数必须指定数据类型,这有助于减少运行时错误,提高代码的健壮性。
- 真正的面向对象:完全支持基于类的继承、封装和多态。
- 事件处理模型:采用事件冒泡和事件捕获机制,使交互处理更加清晰和强大。
- 显示列表:全新的显示对象管理方式,使舞台上的元素(如影片剪辑、文本等)的管理更加直观。
开发环境
- Adobe Animate (前身为 Flash Professional):这是目前官方推荐的、用于创建 AS3 项目的 IDE,它可以用来绘制图形、创建时间轴动画,并编写和调试 AS3 代码。
- Flash Builder:一个更专业的、基于 Eclipse 的开发环境,适合大型项目开发,但现在已停止更新。
- 代码编辑器:如 Visual Studio Code (配合相关插件) 或 Sublime Text,可以用来编写纯代码的 AS3 项目。
第一个程序:"Hello, World!"
让我们在 Adobe Animate 中创建第一个 AS3 程序。
-
打开 Adobe Animate,创建一个新的 ActionScript 3.0 文档。
-
在舞台上,选择 文本工具,画一个文本框,然后在属性面板中将其设置为 "动态文本",并给这个文本框一个实例名,
hello_txt。
(图片来源网络,侵删) -
在时间轴上,选中 第一帧,按
F9打开 "动作" 面板。 -
在面板中输入以下代码:
// 在这里编写你的 ActionScript 代码 // 将字符串 "Hello, World!" 赋值给名为 hello_txt 的动态文本框 hello_txt.text = "Hello, World!";
-
按
Ctrl + Enter(Windows) 或Cmd + Enter(Mac) 测试影片,你应该能看到舞台上显示 "Hello, World!"。
代码解释:

hello_txt:这是我们在第2步为动态文本框设置的实例名,通过这个名字,ActionScript 就可以找到并操作这个文本框。- 点号表示“属于”或“访问...的...”。
text:这是动态文本框的一个属性,用于控制其显示的文本内容。- 赋值操作符。
"Hello, World!":这是一个字符串,用双引号括起来的文本。- 语句结束符,表示一行代码的结束。
第二部分:核心语法
变量与数据类型
变量是存储数据的容器,在 AS3 中,声明变量时最好指定其数据类型。
常用数据类型:
String:字符串,如"你好"。Number:数字,可以是整数或小数,如123,14。int:整数,用于没有小数的数字,性能比Number稍好。uint:无符号整数,只能存储 0 到 4294967295 之间的正整数。Boolean:布尔值,只有true(真) 或false(假)。Array:数组,用于存储一组有序的数据。Object:对象,可以存储键值对,是最灵活的类型。
声明变量:
var playerName:String = "张三";
var playerScore:int = 1000;
var isGameOver:Boolean = false;
var inventory:Array = ["剑", "盾牌", "药水"];
var playerData:Object = {name: "李四", level: 5};
运算符
- 算术运算符: , , , , (取余)
- 赋值运算符: , , , , (
x += 5等同于x = x + 5) - 比较运算符: (等于), (不等于),
>(大于),<(小于),>=,<= - 逻辑运算符:
&&(与), (或), (非)
控制流
条件语句:
var score:int = 85;
if (score >= 90) {
trace("优秀");
} else if (score >= 60) {
trace("及格");
} else {
trace("不及格");
}
循环语句:
// for 循环:循环指定次数
for (var i:int = 0; i < 5; i++) {
trace("循环次数: " + i);
}
// while 循环:当条件为 true 时循环
var j:int = 0;
while (j < 5) {
trace("j 的值是: " + j);
j++;
}
trace() 函数会在“输出”面板中打印信息,是调试代码的好帮手。
第三部分:面向对象编程
AS3 是一门完全面向对象的语言,理解类和对象是掌握 AS3 的关键。
类 与 对象
- 类:是创建对象的蓝图或模板,它定义了一类事物所具有的属性(数据)和方法(行为)。
- 对象:是类的实例,是根据类这个蓝图创建出来的具体实体。
创建一个简单的类
让我们创建一个 Player 类。
- 在 Animate 中,选择 文件 -> 新建 -> ActionScript 3.0 类。
- 在弹出的窗口中,类名输入
Player,包名可以留空或输入com.example。 - 点击“确定”,Animate 会自动生成一个
Player.as文件,并打开它。
// Player.as 文件
package { // 包声明,将类组织在命名空间中
public class Player { // 类定义,public 表示这个类可以被外部访问
// 属性
public var name:String;
public var health:int;
// 构造函数,在创建对象时自动调用
public function Player(playerName:String, initialHealth:int) {
trace("Player 对象正在被创建...");
this.name = playerName; // 使用 this 关键字区分属性和参数
this.health = initialHealth;
}
// 方法
public function takeDamage(damage:int):void {
health -= damage;
trace(name + " 受到了 " + damage + " 点伤害,当前生命值: " + health);
}
// 返回值为 void 的方法,表示不返回任何值
public function heal(amount:int):void {
health += amount;
trace(name + " 恢复了 " + amount + " 点生命值,当前生命值: " + health);
}
}
}
使用类
我们回到主时间轴的代码,来使用这个 Player 类。
// 在主时间轴的帧动作中
// 导入 Player 类(如果包名不为空,则需要导入)
// import com.example.Player;
// 创建 Player 类的实例(对象)
var hero:Player = new Player("勇士", 100);
var monster:Player = new Player("史莱姆", 30);
// 调用对象的方法
hero.takeDamage(10); // 输出: 勇士 受到了 10 点伤害,当前生命值: 90 