AS2.0 是一个历史悠久的编程语言,主要用于 Flash 8 和 Flash CS3 等早期版本,虽然现在已经被 AS3.0 和现代 Web 技术取代,但理解 AS2.0 对于维护旧项目、学习 Flash 动画制作的历史以及理解面向对象编程的基本概念仍然非常有价值。
本教程将从零开始,循序渐进,带你入门 AS2.0。
第一部分:基础入门
什么是 ActionScript 2.0 (AS2.0)?
ActionScript 是 Flash 的编程语言,AS2.0 是其第二个主要版本,它引入了“面向对象编程”(OOP)的概念,使得代码结构更清晰、更易于管理和复用,相比之前的 AS1.0 是一个巨大的飞跃。
如何编写和运行 AS2.0 代码?
主要有两种方式:
时间轴脚本 这是最直观的方式,直接写在 Flash 的时间轴上。
- 打开动作面板:在 Flash 中,按
F9键,或者点击菜单栏的窗口->动作。 - 选择帧:在时间轴上点击你想要添加代码的帧(通常是关键帧)。
- 编写代码:在动作面板中输入代码,确保左上角的 "动作工具箱" 选择了 "动作脚本 2.0"。
外部 .as 文件 这是更专业、更推荐的方式,特别是对于复杂的项目,它将代码与动画分离。
- 创建 .as 文件:使用任何文本编辑器(如 Notepad++, Sublime Text, Flash 自带的脚本编辑器)创建一个纯文本文件,
Main.as。 - 在 Flash 中链接:
- 在 Flash 中,点击舞台上的主时间轴的第一帧。
- 打开动作面板(
F9)。 - 输入以下代码来链接你的外部类文件:
#include "Main.as"
或者,如果使用类的方式:
// 假设你有一个 Main.as 文件,里面定义了一个 Main 类 var main:Main = new Main();
第二部分:AS2.0 核心语法
变量
变量是存储数据的容器。
// 语法: var 变量名:数据类型 = 值; var myName:String = "张三"; // 字符串 var myAge:Number = 25; // 数字 var isStudent:Boolean = true; // 布尔值 (true/false) var scores:Array = [90, 85, 95]; // 数组
数据类型:
String: 文本,如"你好"。Number: 数字,如123,14。Boolean: 布尔值,true或false。Object: 对象,可以包含多个属性和方法。Array: 数组,用于存储值的列表。MovieClip: 影片剪辑,Flash 中的动画对象。Void: 表示没有返回值。
函数
函数是一段可以重复执行的代码块。
// 语法: function 函数名(参数1:类型, 参数2:类型):返回类型 {
// // 代码
// return 返回值;
// }
// 定义一个不带参数和返回值的函数
function sayHello() {
trace("你好,世界!"); // trace() 是在输出面板中打印信息的函数
}
// 调用函数
sayHello(); // 输出: 你好,世界!
// 定义一个带参数和返回值的函数
function addNumbers(a:Number, b:Number):Number {
var sum:Number = a + b;
return sum;
}
// 调用函数并接收返回值
var result:Number = addNumbers(5, 3);
trace("结果是: " + result); // 输出: 结果是: 8
条件语句
根据不同的条件执行不同的代码。
var score:Number = 85;
if (score >= 90) {
trace("优秀!");
} else if (score >= 60) {
trace("及格!");
} else {
trace("不及格!");
}
循环语句
重复执行某段代码。
// for 循环
for (var i:Number = 1; i <= 5; i++) {
trace("循环次数: " + i);
}
// while 循环
var j:Number = 0;
while (j < 3) {
trace("While 循环: " + j);
j++;
}
事件处理
让程序对用户的操作(如点击鼠标、按下键盘)做出反应,这是交互式动画的核心。
最常用的事件:
onPress: 鼠标按下时触发。onRelease: 鼠标按下并释放时触发(最常用的点击事件)。onRollOver: 鼠标滑过时触发。onRollOut: 鼠标滑出时触发。onEnterFrame: 每一帧都触发(用于制作动画)。
如何添加事件?
假设你舞台上有一个按钮实例,名为 myButton。
方法A:直接附加到按钮实例上
- 选中舞台上的按钮。
- 打开动作面板(
F9)。 - 输入以下代码:
on(press) { trace("按钮被按下了!"); }
方法B:使用事件处理函数(推荐)
这种方法将代码写在时间轴上,更符合代码分离的思想。
-
在时间轴上选择一个关键帧。
-
打开动作面板,输入:
// 给 myButton 添加点击事件 myButton.onRelease = function() { trace("按钮被点击了!"); // 也可以操作其他对象,比如让一个叫 ball 的影片剪辑移动 ball._x += 10; };
第三部分:与 Flash 元素交互
这是 AS2.0 最强大的地方,通过代码控制舞台上的对象。
访问实例名称
每个 Flash 元素(影片剪辑、按钮、文本框)都有一个“实例名称”,这是代码中识别它的唯一标识。
- 在舞台上绘制一个圆形,按
F8将其转换为“影片剪辑”。 - 在属性面板中,给它一个实例名称,
ball_mc。 - 在时间轴上写代码来控制它:
// 控制 ball_mc 的位置 ball_mc._x = 100; // 设置 X 坐标 ball_mc._y = 200; // 设置 Y 坐标 // 控制 ball_mc 的透明度 ball_mc._alpha = 50; // 50% 透明度 // 控制 ball_mc 的缩放 ball_mc._xscale = 150; // X轴放大到150% ball_mc._yscale = 150; // Y轴放大到150% // 控制 ball_mc 的可见性 ball_mc._visible = false; // 隐藏 // ball_mc._visible = true; // 显示
动态创建元素
你可以在代码中动态地创建新的影片剪辑。
// 创建一个空的影片剪辑
var newClip:MovieClip = this.createEmptyMovieClip("newClip_mc", this.getNextHighestDepth());
// 在新创建的剪辑中画一个矩形
newClip.lineStyle(2, 0x000000); // 线条样式:2像素宽,黑色
newClip.beginFill(0xFF0000); // 填充颜色:红色
newClip.moveTo(0, 0); // 移动到画布 (0,0)
newClip.lineTo(50, 0); // 画线到 (50,0)
newClip.lineTo(50, 50); // 画线到 (50,50)
newClip.lineTo(0, 50); // 画线到 (0,50)
newClip.lineTo(0, 0); // 画线回 (0,0)
newClip.endFill(); // 结束填充
// 设置新剪辑的位置
newClip._x = 150;
newClip._y = 150;
使用 onEnterFrame 制作动画
onEnterFrame 是一个事件,它会以每秒约 12 到 60 次(取决于你的帧速率)的速度不断触发,这是制作动画的基础。
// 假设舞台上有一个叫 "movingBall_mc" 的影片剪辑
movingBall_mc.onEnterFrame = function() {
// 每一帧,将 movingBall_mc 的 x 坐标加 1
this._x += 1;
// 如果它移出了舞台右边界(550是默认舞台宽度)
if (this._x > 550) {
// 让它从左边重新出现
this._x = 0;
}
};
第四部分:面向对象编程入门
AS2.0 的核心是 OOP,它让你把相关的属性(变量)和方法(函数)封装到一个“类”中。
创建一个类
创建一个 Car.as 文件。
// Car.as
class Car {
// 属性 (变量)
var speed:Number;
var color:String;
// 构造函数,当 new Car() 时被调用
function Car(carColor:String) {
this.speed = 0;
this.color = carColor;
trace("一辆 " + this.color + " 色的汽车被创建!");
}
// 方法 (函数)
function accelerate():Void {
this.speed += 10;
trace("加速!当前速度: " + this.speed);
}
function brake():Void {
this.speed = Math.max(0, this.speed - 10); // 速度不能小于0
trace("刹车!当前速度: " + this.speed);
}
}
使用类
在 Flash 的主时间轴第一帧,链接并使用这个类。
// 在主时间轴的动作面板中
#include "Car.as" // 如果使用 .as 文件
// 创建一个 Car 类的实例 (对象)
var myCar:Car = new Car("红色");
// 调用对象的方法
myCar.accelerate(); // 输出: 一辆 红色 色的汽车被创建! 加速!当前速度: 10
myCar.accelerate(); // 输出: 加速!当前速度: 20
myCar.brake(); // 输出: 刹车!当前速度: 10
第五部分:实用技巧与实例
实例1:制作一个简单的跟随鼠标的动画
- 在舞台上画一个圆,转换为影片剪辑,实例名为
follower_mc。 - 在时间轴上写代码:
follower_mc.onEnterFrame = function() {
// 让 follower_mc 的位置向鼠标位置移动
// 乘以 0.2 是一个缓动系数,让移动更平滑
this._x += (this._parent._xmouse - this._x) * 0.2;
this._y += (this._parent._ymouse - this._y) * 0.2;
};
_parent 指的是当前对象的父级(这里是主时间轴),_xmouse 和 _ymouse 是鼠标的坐标。
实例2:加载外部图片
// 创建一个空的影片剪辑来装载图片
var container:MovieClip = this.createEmptyMovieClip("container_mc", this.getNextHighestDepth());
// 创建一个 Loader 对象
var my_mcl:MovieClipLoader = new MovieClipLoader();
var myListener:Object = new Object();
// 监听加载事件
myListener.onLoadComplete = function(target:MovieClip) {
trace("图片加载完成!");
// 可以在这里对加载完成的图片进行操作
target._width = 200; // 设置宽度
target._height = 200; // 设置高度
};
my_mcl.addListener(myListener);
// 开始加载图片
my_mcl.loadClip("image.jpg", container);
第六部分:学习资源与注意事项
注意事项
- 已过时:AS2.0 不是 学习现代 Web 开发的语言,如果你目标是做网页,请直接学习 JavaScript。
- 性能:AS2.0 的性能远不如 AS3.0。
- 调试困难:AS2.0 的错误提示不如 AS3.0 明确,调试起来更痛苦。
- Flash Player 淘汰:Adobe 已于 2025 年正式停止支持 Flash Player 和 Flash,这意味着在现代浏览器中,.swf 文件(Flash 动画)默认无法运行,学习 AS2.0 主要是为了维护旧项目或满足特定怀旧需求。
推荐学习资源
由于 AS2.0 比较古老,新资源很少,主要依赖老教程。
-
Adobe 官方文档 (存档):
- ActionScript 2.0 Language Reference (这是最权威的参考书,可以查所有函数和类的用法)
-
经典教程网站 (存档):
- Kirupa.com: 曾经是 Flash 学习的圣地,有大量高质量的 AS2.0 教程,虽然网站已转型,但通过 Wayback Machine 等方式可以访问旧内容。
- ActionScript.org: 另一个老牌的 Flash/ActionScript 社区论坛。
-
视频平台:
- 在 YouTube 上搜索 "Flash AS2.0 tutorial",可以找到很多英文的老视频教程。
-
中文社区:
- 闪吧: 国内最老牌、最知名的 Flash 动画和游戏社区,论坛里有海量的 AS2.0 教程、源码和问答,是寻找中文资料的最佳去处。
希望这份教程能帮助你顺利入门 ActionScript 2.0!祝你学习愉快!
