# 把 Flash 游戏移植到 Steam

> Flash Player 在 2020 年底停止支持。Flash 游戏上 Steam 的方式，是被重建成原生桌面游戏，而不是被套一层壳。

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

把 Flash 游戏移植到 Steam，意思是把一款你拥有的游戏重建成原生桌面构建，因为 Flash Player 运行时已于 2020 年 12 月 31 日停止支持并在 2021 年被阻止。把 SWF 塞进一层壳里发布，不是一个可行的发行方案。

多数 Flash 游戏是为门户站做的：单局很短、一个固定舞台尺寸、鼠标优先的操作、没有存档系统、也没有暂停。上 Steam 会改变所有这些预期。玩家想要分辨率选项、手柄支持、崩溃后还在的存档，以及足以支撑一次购买的内容量。这就是为什么 Flash 到 Steam 的项目通常一半是移植、一半是扩充。

Summer Engine 把游戏重建成归你所有的项目，可导出为桌面版本发布到 Steam 和 itch.io。代码是 C++ 和 GDScript，C# 可在桌面编辑器中使用。无需向 Summer 支付版税或收入分成。

## 把你的内容从 Flash 里取出来

如果你还留着 FLA 源文件，就把元件导出成 PNG 序列或 SVG，把音频导出成 WAV 或 OGG。矢量美术可以按任意分辨率重新导出，这是 Flash 美术相对老像素美术唯一真正的优势。如果只剩 SWF，有工具能从你自己的文件里提取内嵌图像和声音，反编译器也能还原 ActionScript 供你当文档读。只对你拥有或有明确许可的游戏这么做。

## 从 ActionScript 到现代语言

ActionScript 3 是基于类的，放在 GDScript 或 C# 旁边会很眼熟。变的是运行时概念：显示列表变成节点树，MovieClip 时间轴变成动画播放器，enterFrame 变成处理回调，Event 监听器变成信号。重写逻辑，保留调校数值。来自 30 fps 舞台的帧计时必须转换成时间增量，这样游戏在 60 fps 及以上才会有同样的表现。

## Flash 游戏成为 Steam 游戏之前还缺什么

加上存档系统，因为多数 Flash 游戏靠门户站的 cookie，或者干脆什么都没有。加上暂停菜单、分辨率与全屏选项、音量滑条，以及可重映射的操作。通过 Steam Input 加上手柄支持。把固定的 800 乘 600 舞台放大到现代宽屏分辨率，同时别把 UI 拉变形。也要考虑内容长度：一款十五分钟的门户游戏，通常需要更多模式、关卡或成长线，才撑得过 Steam 的评价。

## 发行之前先理清权利

在上架商店页面之前，先弄清楚谁拥有什么。很多 Flash 游戏接受过赞助、独家授权给某个门户站，或者用了购买的音效包和授权音乐。赞助合同有时会授予至今仍然有效的分发权。只有当你握有设计、美术和音频的权利，或者替换掉你不拥有的部分时，才发布这次重建。

## FAQ

### 我能直接把 SWF 套进桌面应用发到 Steam 吗？

那条路脆弱又过时。Flash Player 在 2020 年底停止支持。通过 Ruffle 这类项目做模拟，可以为浏览器保存一款游戏，但商业化的 Steam 发行更适合做成带存档、选项和手柄支持的原生重建。

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

通常可以，只要游戏归你。内嵌的美术和音频能从你自己的 SWF 里提取出来，ActionScript 也能用反编译器还原，当作重建的规格说明来读。

### ActionScript 能自动转换吗？

不能。它要用 GDScript、C# 或 C++ 重写。类结构转起来很容易，但显示列表和时间轴行为必须用节点与动画重新制作。

### 一款老 Flash 游戏在 Steam 上卖得动吗？

只有加上更多内容和现代便利之后才行。Steam 买家期待存档、设置、手柄支持，以及比门户游戏更长的游玩时长。成功的 Flash 到 Steam 发行，通常是扩充过的重制，而不是直接移植。

### 在 Steam 上发行要花多少钱？

每款游戏一次性 100 美元的应用提交费，销售额达到 1000 美元后可回收，再加上 Valve 的分成。Summer Engine 不额外收分成。

[开始重建](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