Flash AS3.0 基础教程

第一章:AS3.0 是什么?为什么是它?

  • ActionScript (AS) 是 Flash 的编程语言,用来控制动画、处理用户交互(如点击鼠标、按下键盘)、加载外部数据等。
  • ActionScript 3.0 (AS3.0) 是一个重大更新,于 2007 年随 Flash CS3 发布,相比之前的 AS1.0 和 AS2.0,AS3.0 有以下核心优势:
    1. 性能大幅提升:运行速度是 AS2.0 的数倍,尤其适合开发复杂的游戏和应用程序。
    2. 面向对象编程:提供了更强大、更规范的结构,让代码更易于管理和复用。
    3. 错误处理更健壮:引入了 try...catch...finally 结构,能更好地捕获和处理运行时错误。
    4. 事件模型更完善:提供了统一、强大的事件处理机制。

重要提示:从 Flash CC 2025 开始,Adobe 已停止对传统 Flash Professional 的更新,并推出了新的动画工具 Adobe Animate,Animate 在制作传统帧动画和 AS3.0 编程方面完全兼容旧的 FLA 文件,是目前学习 AS3.0 的首选软件。

flash as3.0 基础教程
(图片来源网络,侵删)

第二章:你的第一个 AS3.0 程序 - "Hello, World!"

我们将学习最基础的编程概念:输出文本

  1. 创建新文档

    • 打开 Adobe Animate (或 Flash Professional)。
    • 选择 ActionScript 3.0 作为文档类型,创建一个新文件。
  2. 打开动作面板

    • F9 键,或者点击菜单栏的 窗口 -> 动作
    • 你会看到一个带有语法高亮的代码编辑器。
  3. 编写代码

    flash as3.0 基础教程
    (图片来源网络,侵删)
    • 在代码编辑器中输入以下代码:
    trace("Hello, World!");
  4. 测试影片

    • Ctrl + Enter (Windows) 或 Cmd + Enter (Mac)。
    • 你会看到一个黑色的控制台窗口弹出来,里面显示着 Hello, World!

代码解释

  • trace() 是 AS3.0 中一个非常重要的调试函数,它会把括号内的内容输出到调试控制台,方便程序员查看变量的值或程序的执行流程,在实际发布的 SWF 文件中,trace 语句是不会被执行的。

第三章:核心概念 - 变量与数据类型

变量就像一个带标签的盒子,用来存储数据。

1 变量声明

在 AS3.0 中,使用 var 关键字来声明变量。

flash as3.0 基础教程
(图片来源网络,侵删)
// 语法: var 变量名:数据类型 = 值;
var myName:String = "张三";
var age:int = 25;
var isStudent:Boolean = true;
var score:Number = 95.5;

2 常用数据类型

数据类型 描述 示例
String 字符串,用双引号括起来。 "你好 AS3.0"
int 整数,用于存储没有小数部分的数字。 100, -50
uint 无符号整数,只能存储 0 或正整数。 255 (常用于颜色值)
Number 数字,可以包含小数。 14, -99.9
Boolean 布尔值,只有两个值:true (真) 或 false (假)。 true, false
Array 数组,用来存储一个列表的值。 ["苹果", "香蕉", "橙子"]
Object 对象,最灵活的数据类型,可以存储键值对。 {name:"李四", age:30}

3 严格数据类型

AS3.0 是一种强类型语言,这意味着你在声明变量时必须指定它的数据类型,这有助于编译器在早期就发现错误,使代码更可靠。

// 正确
var message:String = "你好";
var count:int = 10;
// 错误!编译器会报错,因为 "10" 是字符串,不能赋值给 int 类型的变量
// var count:int = "10"; 

第四章:显示对象与舞台

在 AS3.0 中,舞台上所有可视的元素(如形状、影片剪辑、文本等)都被称为显示对象

1 舞台

舞台是最终显示内容的地方,你可以通过 stage 属性来访问它。

2 创建显示对象

我们可以通过代码动态创建图形。

// 1. 创建一个形状
var myShape:Shape = new Shape();
// 2. 在形状上绘制内容
// 设置线条样式
myShape.graphics.lineStyle(2, 0x000000); // 线宽为2,颜色为黑色
// 开始填充
myShape.graphics.beginFill(0xFF0000); // 填充颜色为红色
// 绘制一个矩形 (x, y, width, height)
myShape.graphics.drawRect(100, 100, 150, 100);
// 结束填充
myShape.graphics.endFill();
// 3. 将形状添加到舞台的显示列表中,让它可见
addChild(myShape);

代码解释

  • new Shape():创建一个新的 Shape 对象实例。
  • myShape.graphics:访问该形状的绘图API。
  • lineStyle(), beginFill(), drawRect() 等是绘图方法。
  • addChild():这是 AS3.0 中最核心的方法之一,用于将一个显示对象添加到舞台上或另一个显示对象内部。

第五章:事件处理 - 让程序“动”起来

事件是 AS3.0 的灵魂,用户点击、鼠标移动、键盘按下、动画播放到某一帧等,都会触发事件,我们需要编写事件侦听器来“响应”这些事件。

1 事件处理的基本模式

对象.addEventListener(事件类型, 处理函数);

  1. 对象:你要监听哪个对象的事件(比如一个按钮)。
  2. 事件类型:你要监听什么事件(比如鼠标点击 MouseEvent.CLICK)。
  3. 处理函数:当事件发生时,要执行的代码块。

2 实例:创建一个可点击的按钮

  1. 在 Animate 中,用绘图工具画一个矩形,并按 F8 将其转换为“按钮”符号(Button)。
  2. 给这个按钮实例命名一个实例名,myButton(在属性面板中设置)。
  3. 在主时间轴的 动作 面板中,输入以下代码:
// 定义一个函数,用来响应点击事件
function onButtonClick(event:MouseEvent):void {
    // trace 语句会在点击按钮时执行
    trace("按钮被点击了!");
    // 我们还可以改变舞台上的某个对象
    // 假设我们有一个名为 myShape 的矩形
    myShape.x += 10; // 每次点击,矩形向右移动10像素
}
// 为 myButton 按钮添加一个事件监听器
// 当它被点击时,调用 onButtonClick 函数
myButton.addEventListener(MouseEvent.CLICK, onButtonClick);

代码解释

  • function onButtonClick(event:MouseEvent):void:定义了一个名为 onButtonClick 的函数。
    • event:MouseEvent:这个参数会自动传递事件对象,里面包含了事件的相关信息(如点击的坐标等)。
    • void:表示这个函数没有返回值。
  • myButton.addEventListener(...):将 onButtonClick 函数“挂载”到 myButtonCLICK 事件上。

第六章:控制时间轴

通过 AS3.0,你可以精确地控制动画的播放。

1 播放和停止

假设你有一个名为 myMovieClip 的影片剪辑。

// 播放影片剪辑
myMovieClip.play();
// 停止影片剪辑
myMovieClip.stop();

2 跳转到指定帧并播放/停止

// 跳转到第 30 帧并停止
myMovieClip.gotoAndStop(30);
// 跳转到标签为 "ending" 的帧并播放
myMovieClip.gotoAndPlay("ending");

第七章:交互实例 - 制作一个简单的计数器

这个例子将综合运用我们学过的知识:变量、文本显示、事件处理和时间轴控制。

  1. 准备舞台

    • 在舞台上创建三个动态文本框(Dynamic Text),并分别给它们设置实例名:countText, increaseBtn, decreaseBtn
    • increaseBtndecreaseBtn 文本框上,分别绘制一个“+”和一个“-”的图形,并将它们转换为按钮符号,给按钮实例命名为 plusButtonminusButton
  2. 编写代码

    • 在主时间轴的 动作 面板中输入以下代码:
    // 1. 初始化变量
    var count:int = 0; // 计数器初始值为 0
    // 2. 更新显示文本的函数
    function updateDisplay():void {
        // 将 count 变量的值转换成字符串,赋给文本框
        countText.text = String(count);
    }
    // 3. 定义增加计数的函数
    function onIncrease(event:MouseEvent):void {
        count++; // count = count + 1 的简写
        updateDisplay(); // 每次增加后,更新显示
    }
    // 4. 定义减少计数的函数
    function onDecrease(event:MouseEvent):void {
        count--; // count = count - 1 的简写
        updateDisplay(); // 每次减少后,更新显示
    }
    // 5. 添加事件监听器
    plusButton.addEventListener(MouseEvent.CLICK, onIncrease);
    minusButton.addEventListener(MouseEvent.CLICK, onDecrease);
    // 6. 初始调用一次,让文本框显示初始值 0
    updateDisplay();

第八章:面向对象编程 入门

OOP 是 AS3.0 的核心思想,它将数据和操作数据的方法封装在一起,形成一个“对象”。

1 创建一个自定义类

假设我们要创建一个 Player 类来表示游戏中的玩家。

  1. 创建类文件

    • 在 Animate 中,新建一个 ActionScript 文件 (File -> New -> ActionScript 3.0 Class)。
    • 保存为 Player.as注意:文件名必须与类名(Player)完全一致,并且和你的 FLA 文件放在同一个目录下。
  2. 编写类代码

    • Player.as 中输入以下代码:
    // Player.as
    package {
        // 导入必要的类
        import flash.display.Sprite;
        // public class 类名
        public class Player extends Sprite {
            // 1. 属性 (变量)
            public var name:String;
            public var health:int;
            // 2. 构造函数 (当 new Player() 时调用)
            public function Player(name:String, health:int) {
                // 给属性赋值
                this.name = name;
                this.health = health;
                // 可以在这里做一些初始化工作,比如创建一个圆形代表玩家
                this.graphics.beginFill(0x00FF00);
                this.graphics.drawCircle(0, 0, 20);
                this.graphics.endFill();
            }
            // 3. 方法 (函数)
            public function takeDamage(amount:int):void {
                health -= amount;
                trace(name + " 受到了 " + amount + " 点伤害,当前生命值: " + health);
            }
        }
    }
  3. 在 FLA 中使用这个类

    • 回到你的主 FLA 文件,在主时间轴的动作面板中:
    // 创建一个 Player 对象实例
    var player1:Player = new Player("英雄", 100);
    // 设置它的位置
    player1.x = 200;
    player1.y = 200;
    // 将它添加到舞台
    addChild(player1);
    // 调用它的方法
    player1.takeDamage(10); // 输出: 英雄 受到了 10 点伤害,当前生命值: 90

代码解释

  • package:包,用于组织代码,避免命名冲突。
  • public class Player:定义一个名为 Player 的公共类。
  • extends Sprite:表示 Player 类继承自 Sprite 类。Sprite 是一个没有时间轴的显示对象,非常适合用作游戏中的角色或物体。
  • public function Player(...):这是构造函数,在创建对象时自动调用,用于初始化对象的属性。

第九章:资源加载

你可以从外部加载图片、SWF 文件、数据文件等。

// 创建一个 Loader 对象
var myLoader:Loader = new Loader();
// 创建一个 URLRequest 对象,指定要加载的文件路径
var myRequest:URLRequest = new URLRequest("image.jpg");
// 开始加载
myLoader.load(myRequest);
// 当加载完成时,触发 Event.COMPLETE 事件
myLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadComplete);
function onLoadComplete(event:Event):void {
    // 将加载进来的图片添加到舞台
    addChild(myLoader);
    // 可以调整位置
    myLoader.x = 100;
    myLoader.y = 100;
}

第十章:总结与下一步

恭喜你!你已经掌握了 AS3.0 的基础知识,你已经学会了:

  • 如何编写和调试代码。
  • 如何使用变量和数据类型。
  • 如何通过代码创建和控制显示对象。
  • 如何响应用户交互(事件处理)。
  • 如何控制动画播放。
  • 如何使用面向对象的思想来组织代码。
  • 如何加载外部资源。

下一步可以学习什么?

  1. 动画与缓动:学习使用 Tween 类(如 TweenLite)或 fl.transitions 包来制作更流畅的动画效果。
  2. 游戏开发:学习碰撞检测、物理引擎(如 Box2D)、游戏状态管理等。
  3. 数据交互:学习如何加载和解析 XML、JSON 等数据格式,实现与后端服务器的通信。
  4. 音视频控制:学习如何使用 SoundVideo 类来播放和控制多媒体内容。

AS3.0 是一个非常强大且成熟的编程语言,虽然 Flash 平台本身不再是主流,但 AS3.0 的许多思想(如事件驱动、显示列表、面向对象)在现代前端开发(如 JavaScript)中依然广泛存在,学好 AS3.0,将为你的编程之路打下坚实的基础。