常见问题:黑屏或白屏——SWF 加载完画面不出来
核心结论先说
黑屏白屏的原因绝大多数是这三种之一:
- 这个 SWF 用了 Ruffle 还没实现的 API(AVM 2 里尤其常见)
- SWF 内部在加载外部资源时出了问题(子 SWF、XML、图片、跨域)
- 浏览器 / 操作系统层面的限制(自动播放策略、CORS、HTTPS)
按下面顺序排查,每步都做一下。
第一步:用官方 demo 对比
ruffle.rs/demo 上内置了 Alien Hominid、FlyGuy、Marvin Spectrum 等官方挑选的测试 SWF。如果这些都黑屏:
- 问题不在你的 SWF,在 Ruffle 安装 / 浏览器环境里
- 检查:Ruffle 是不是最新版本(稳定版 vs nightly)、浏览器是不是支持 WebAssembly、CSP 头是不是拦了 WASM
如果 demo 能跑但你的 SWF 不行——问题在那个 SWF 本身,继续往下。
第二步:加 --verbose 看日志(桌面版)
ruffle.exe --verbose your-game.swf 2>&1 | Tee-Object -FilePath ruffle.log
然后把 Console 里的输出贴出来重点找:
Unimplemented XYZ→ 找到具体哪个 API 没实现,对照「已知不支持特性」清单NetworkError→ 网络请求失败(URL 错了?CORS?代理?)ParseError→ SWF 文件本身损坏、或者版本太老ClassNotFound→ AS3 里引用的类没找到(通常是 SWF 打包时漏了)
第三步:Web 版看 Console(浏览器)
F12 → Console 面板:
- 红色报错带
CORS policy→ 跨域问题,看本分组「CORS 与混合内容」 - 红色报错带
Mixed Content→ HTTPS 页面里嵌 HTTP 资源,开启upgradeToHttps - 红色报错带
Script error→ 更难定位,试试把 SWF 下载到本地用桌面版打开——桌面版能跑说明是网站层面的问题
第四步:下载 SWF 到本地用桌面版试
把那个 SWF 从网站上下载下来,放到全英文路径(比如 C:\games\test.swf),用桌面版打开:
- 本地能跑、网站上跑不起来 → 问题在网站嵌入配置(CORS、polyfill、版本等)
- 本地也跑不起来 → 问题在 SWF 本身 / Ruffle 版本,试试 nightly 版
第五步:Flashpoint 对比
如果 Ruffle nightly 也跑不起来,但你怀疑这个 SWF 本来应该能跑——去 Flashpoint 里搜一下有没有收录,Flashpoint 是用旧版 Flash Player 跑的。Flashpoint 里能跑但 Ruffle 不能 → 把它作为最小可复现 demo 提交给 Ruffle Issue Tracker。
快速自查清单(按优先级)
- [ ] 官方 demo 能不能跑
- [ ] 桌面版加
--verbose看日志里有没有Unimplemented字样 - [ ] 把 SWF 下载到本地用桌面版试
- [ ] 升级到 nightly 版再试
- [ ] 对照「已知不支持特性」清单自查
- [ ] Flashpoint 对比确认是不是 Ruffle 的缺项