第一部分:基础入门

什么是 ActionScript 3.0?

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

flash as3教程
(图片来源网络,侵删)

AS2 vs AS3 的核心区别 (非常重要!):

  • 编程范式: AS2 是基于过程的,而 AS3 是纯面向对象的,这意味着一切皆对象,代码组织更清晰、更强大。
  • 性能: AS3 运行速度比 AS2 快 10 倍以上,因为它采用了新的虚拟机 AVM2。
  • 事件处理: AS3 引入了事件监听器 模式,取代了 AS2 的 on() 函数,这是处理用户交互的核心。
  • 显示列表: AS3 引入了显示列表 的概念,所有可见元素(影片剪辑、按钮等)都以树状结构组织,管理起来非常直观。
  • 类型检查: AS3 是强类型语言,你必须为变量、函数参数等指定数据类型(如 String, Number, int),这能大大减少运行时错误。

第一个 AS3 程序:Hello World

目标: 在舞台上显示 "Hello, World!"。

步骤:

  1. 创建 FLA 文件: 打开 Adobe Animate (或旧版的 Adobe Flash Professional),创建一个新的 ActionScript 3.0 文档。

    flash as3教程
    (图片来源网络,侵删)
  2. 打开动作面板:F9 键,或者点击菜单栏的 窗口 -> 动作

  3. 编写代码: 在动作面板中,输入以下代码:

    // 定义一个字符串变量
    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);
  4. 测试影片:Ctrl + Enter (Windows) 或 Cmd + Enter (Mac)。

代码解释:

flash as3教程
(图片来源网络,侵删)
  • 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 布尔值,truefalse 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 交互的灵魂,用户点击鼠标、按下键盘、影片加载完成等,都会“触发”一个事件。

基本模式:

  1. 创建事件监听器: 告诉一个对象(比如按钮):“嘿,当你被点击时,请执行这个函数。”
  2. 定义事件处理函数: 编写一个函数,描述当事件发生时具体要做什么。

示例:给按钮添加点击事件

  1. 在舞台上拖入一个 Button 组件,或者自己画一个图形,按 F8 将其转换为 按钮影片剪辑,在属性面板中,给它一个实例名,myButton

  2. 在时间轴的第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 代码的方式:

  1. 时间轴代码:

    • 位置: 直接写在 FLA 文件时间轴的帧上(通常是第1帧)。
    • 优点: 简单直接,适合小型项目、原型或快速测试。
    • 缺点: 代码难以复用,项目一大就会变得混乱。
  2. 外部类文件:

    • 位置: 创建一个独立的 .as 文件(Main.as),然后在 FLA 文件的“发布设置”中指定这个类作为文档类。
    • 优点: 面向对象编程的标准做法,代码结构清晰、易于维护、复用性强,是开发大型应用和游戏的首选。

示例:创建外部类文件

  1. 创建 .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("通过外部类实现的按钮点击!");
          }
      }
  2. 在 FLA 中设置文档类:

    • 打开你的 .fla 文件。
    • 在属性面板中,找到“”这个输入框。
    • 输入你的类名:Main
    • 注意: 这里的类名不需要带 .as 后缀。
  3. 测试: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

第三部分:资源与学习路径

官方资源

社区与教程网站

学习路径建议

  1. 打牢基础: 理解变量、数据类型、显示列表、事件监听器,这是重中之重。
  2. 掌握时间轴: 学会用代码控制影片剪辑的播放和属性。
  3. 拥抱外部类: 开始将所有代码移到 .as 文件中,学习 Document Class 的概念。
  4. 学习常用类: 逐一攻克 Timer, URLLoader, Sound 等常用类。
  5. 实践出真知:
    • 小游戏: 从简单的“打地鼠”、“贪吃蛇”开始。
    • 交互式动画: 制作一个可以由用户控制的动画。
    • 数据可视化: 加载外部数据(如 XML, JSON)并用图表展示出来。

AS3 是一门非常经典且功能强大的语言,虽然现在有更现代的替代方案(如 Haxe, TypeScript),但学习 AS3 能为你打下坚实的面向对象编程和交互式开发基础,祝你学习顺利!