# 把 Flash 游戏移植到今天仍在使用的平台上

> Adobe 在 2020 年 12 月 31 日结束了 Flash Player 支持。移植 Flash 游戏，意思是重建一款你拥有的作品，让它在人们仍在使用的平台上运行。

- URL: https://www.summerengine.com/zh/port-a-flash-game
- Keyword: 移植 Flash 游戏
- Related: https://www.summerengine.com/zh/porting

移植 Flash 游戏，意思是重建一款你拥有的游戏，因为已经没有浏览器再运行 Flash。Adobe 在 2020 年 12 月 31 日结束了 Flash Player 支持，并在 2021 年 1 月阻止内容运行。每一个依赖该插件的 SWF 都在那天停止工作。

你需要这款游戏的权利。移植你自己做的 Flash 游戏，或你持有重制许可的游戏。反编译别人的 SWF、提取它的资源再重新发布，不在本页范围内。

只要重建得当，Flash 游戏很适合现代目标。它本来就为鼠标输入、矢量美术和短时段游玩而做。Summer Engine 把它重建成归你所有的项目，并导出桌面版本发布到 Steam 和 itch.io，不收分成。用 GDScript 重建的游戏还可以导出网页版本，你把它发布到 Summer Games。

## 旧 Flash 项目里能留下来的东西

如果你还留着 FLA 文件，矢量美术就是你手上最值钱的东西。矢量图形能按任意分辨率重新导出，也就是说一款按 550x400 舞台制作的游戏，可以在 4K 下重建得依然锐利。时间轴动画需要重做成动画轨道或精灵表，因为没有引擎能读取 Flash 时间轴。ActionScript 属于参考资料：逻辑能迁移，语法不能。

## 从 ActionScript 到现代语言

ActionScript 3 和 GDScript 都是对动态特性友好、基于类的脚本语言，所以这种转写往往是机械性的。事件监听器变成信号。enterFrame 处理函数变成一个处理回调。MovieClip 变成带精灵和动画播放器的节点。ActionScript 2 的代码更松散，通常需要重构而不是翻译。如果你更习惯 C#，也可以在桌面编辑器中使用。

## 基于帧的计时必须改成时间增量

Flash 跑在舞台帧率上，常见是每秒 24 或 30 帧，而大量游戏逻辑数的是帧而不是秒。在以 60、120 或 144 Hz 运行的现代显示器上，数帧会让游戏速度失控。重建过程中要把每一个帧计数器换成基于时间的数值。这是 Flash 移植里最常见的 bug 来源，而且边重建边修，比事后再修便宜得多。

## 鼠标优先的设计，如今要上触摸

Flash 游戏是为鼠标光标做的，有悬停状态、点击拖拽和精确指向。触摸屏没有悬停，指尖也比光标大得多。基于悬停的提示需要一个点按替代，小按钮需要更大的点击区域，拖拽交互还要考虑手指会盖住被拖的东西。用键盘操作的 Flash 游戏，需要为这款游戏专门设计的屏幕控件布局，而不是一层通用叠层。

## 重建后的游戏去哪里

重建后的 Flash 游戏以桌面版本发布，上架 Steam 或作为 itch.io 下载。用 GDScript 重建的游戏还可以作为网页版本发布到 Summer Games，玩家就能在浏览器中游玩。Flash 时代的短小游戏很适合先在 itch.io 提供免费下载，让玩家试玩，再推出付费的 Steam 版本。很多这类游戏也适合手机，而 iOS 和 Android 版本需要对应平台的工具链和签名，还要针对触控输入做一轮适配。

## FAQ

### 为什么 Flash 游戏现在打不开了？

Adobe 在 2020 年 12 月 31 日结束了 Flash Player 支持，并在 2021 年 1 月 12 日阻止 Flash 内容运行。浏览器彻底移除了该插件。任何以 SWF 形式分发、依赖插件的游戏，对普通玩家来说都跑不起来了。

### SWF 文件能转换成现代游戏吗？

不能转换成你可以维护的可编辑项目。反编译器能提取一部分资源和字节码，但结果不是另一个引擎里能跑的项目。Flash 移植是重建，最好从你原来的 FLA 文件和 ActionScript 源码开始。

### FLA 文件丢了，我还能移植这款 Flash 游戏吗？

能，只要你拥有权利。你可以用手上还剩的东西重建：导出过的美术、截图、游玩录像和设计笔记。有矢量源文件会让重建便宜很多，但它们不是必需的。

### ActionScript 代码能迁移吗？

逻辑能迁移，语法不能。ActionScript 3 相当直接地对应到 GDScript：监听器变成信号，enterFrame 变成处理回调，MovieClip 变成带动画播放器的节点。ActionScript 2 通常需要重构。

### Flash 移植里最常见的 bug 是什么？

基于帧的计时。Flash 跑在固定的舞台帧率上，常见是 24 或 30，而游戏逻辑经常在数帧。在 60 或 144 Hz 显示器上，这套逻辑速度就错了。重建时把每一个帧计数器换成时间增量。

### 重建后的游戏还能在浏览器里跑吗？

可以。在 Summer 中，用 GDScript 重建的游戏可以导出网页版本，你把它发布到 Summer Games，玩家就能在浏览器中游玩。如果你最看重一模一样的原版，Ruffle 这类模拟器可以在浏览器中运行你自己的 SWF 用于存档保留，不过它对部分游戏的 ActionScript 3 支持仍不完整。

[重建你的 Flash 游戏](https://www.summerengine.com/zh/download)

---

## Machine-readable resources

- Site index for agents: https://www.summerengine.com/llms.txt
- Full inlined content: https://www.summerengine.com/llms-full.txt
- Porting catalog: https://www.summerengine.com/llms-porting.txt
- Structured catalog: https://www.summerengine.com/agent-catalog.json
- Sitemap: https://www.summerengine.com/sitemap.xml
- Developer resources: https://www.summerengine.com/docs
- Summer API (assets from any agent or code; public per-call model prices): https://docs.summerengine.com/api