ruffle 中文文档 下载 App

AVM 2 兼容性(AS3):快速完善中,支持现状与已知 API 缺口

AVM 2 是什么

2006 年 Flash Player 9 发布时引入了 ActionScript 3 和对应的 AVM 2 虚拟机。AS3 是一次彻底不兼容的重写——更像 Java / C#(强类型、类、接口、包、package 声明),跟 AS1/AS2 完全不同。

Flash Professional CC(2013)之后 Adobe 强制所有新项目用 AS3——所以 2013 年之后的所有 Flash 内容(包括 Adobe AIR 应用、Mobile Flash、大量大型 Flash 游戏)都是 AVM 2。

官方数据

维度进度
Language(AS3 语言本身)~90%
API(内置类 / 方法)~82%

注意两个数字跟 AVM 1 的「语言 99% / API 82%」对比——Language 进步明显,但 API 方面 AS3 的类库极其庞大(flash 命名空间下有上百个包),82% 已经覆盖了最常用的子集。

为什么 AS3 游戏经常出问题

AS3 游戏(尤其是大型商业 Flash 游戏)大量使用 AS3 独有的高级特性:

上面任何一个 API 没实现或行为有差异,都可能让一个依赖它的 AS3 游戏直接白屏或报错。这跟 AVM 1 的「轻微不准但还能玩」完全不同。

已知不支持的 AVM 2 功能

ruffle.rs/compatibility/avm2 页面维护了一个完整的已实现 API 列表和未实现 API 列表。主要缺口:

怎么自己快速测试一个 AS3 SWF

  1. 把 SWF 拖进 Ruffle 桌面版
  2. 如果画面起来了、能动、能交互 —— AVM 2 支持度足够
  3. 如果白屏或报错 —— 在命令行加 --verbose 启动:ruffle.exe --verbose game.swf,控制台会打印具体卡在哪个 ActionScript 调用上
  4. 对比 ruffle.rs/compatibility/avm2 的未实现 API 列表,看能不能找到对应的缺项

一个现实的预期

报告 AS3 兼容性问题

在 GitHub Issue Tracker 开新 Issue 时,附上: