一位参赛开发者花了约 12 到 15 小时做了一款循环游戏,在 Godot 编辑器里跑得很好。然后他导出 HTML,循环本身却不工作了。玩家死了,什么都没发生。编辑器与网页版之间的这道鸿沟,就是整个故事。
快速信息
游戏:BLAZOWACHO 的 err Friday,你扮演怨灵破坏周五夜的龙与地下城团,死亡本应让你循环进下一个周五夜。
来源:作者本人在 itch.io 上发的 GMTK 2025 复盘,2025 年 8 月 6 日发布。
网页版症状:死亡复活循环不工作,敌人 AI 卡在警觉状态、无视玩家或行为不可预测。
另一个只在网页版出现的症状:玩家同时看到游戏光标和系统光标,因为开发时 Godot 藏起了系统光标。
复盘没给出的部分:没有 Godot 版本、没有导出设置、没有浏览器、没有控制台报错。网页版失败的病因没有公布。
文档一侧:Godot 4.4 官方文档的网页导出章节,包括单线程导出、线程头与渐进式网页应用 workaround。
最后核实:2026年10月28日。
循环游戏,循环停了
GMTK 2025 的主题是 loop,作者整个概念都围着它转。你扮演怨灵,任务是消灭玩家角色、最后干掉地下城主,破坏一场周五夜跑团的永恒循环。死亡是故事的一部分:怨灵被击败后,会在下一个周五夜复活再来。敌人 AI 用 Default、Alert、Reaction、Return 四态状态机。作者利用工作日午休和周末零碎时间、总计约 12 到 15 小时做完,在 Godot 编辑器里一切正常:状态机灵敏,死亡复活循环能跑,游戏感觉完整。
网页版讲的是另一个故事。本应是体验核心的循环机制不工作:玩家死了,什么都没发生,没有复活、没有叙事推进,只剩一个坏掉的游戏状态。敌人 AI 也坏了,卡在警觉状态、完全无视玩家或行为完全不可预测。除此之外,玩家抱怨最多的是光标:开发时 Godot 藏起了系统光标,作者一直没发现问题,但 HTML 版里玩家同时看到游戏光标和系统光标,移动手感全错。作者把这次提交称为勉强能跑的技术演示,写了复盘而不是藏起来。
作者真正怪的是什么、没 claim 的又是什么
作者的第一条教训是他自己说的:尽早、经常测目标平台。他全程只在 Godot 编辑器里开发,到最后才测 HTML 导出,他称这是不会再犯的新手错误。他的 7 步恢复计划是一张游戏逻辑修复清单,这个区分很重要。第一步是修进度系统,包括周五夜之间正确存读档、死亡后叙事进度保留;第二步是重写 AI,包括距离检测、警觉状态缓冲帧、边缘情况兜底行为;后面的步骤涉及狭窄空间寻路和几种网页版隐藏光标的方法。计划里没有任何一项是改导出设置、加头或开关线程。
这就是本文不给网页版失败定根因的原因。复盘没有给 Godot 版本、线程或扩展开关、浏览器、控制台报错,所以把锅推给跨域头或线程支持等于现编诊断。官方文档仍然有用,但只能作为通用背景,并且要和本案明确分开。自 Godot 4.3 起,单线程导出是网页导出的首选默认方式,和 itch.io 这类商店更兼容;线程支持和扩展支持需要跨域隔离头,即 Cross-Origin-Opener-Policy 设为 same-origin、Cross-Origin-Embedder-Policy 设为 require-corp,或者在无法控制服务器头时用渐进式网页应用的 service worker workaround,且一律要求 HTTPS 安全上下文。网页导出还只跑 Compatibility 渲染器与 WebGL 2.0,Godot 4 的 C# 项目目前不能导出网页,文档建议打开浏览器开发者控制台读 JavaScript、引擎与 WebGL 报错。
能复用的部分:一份提交前网页例行检查,不是作者的修复方案
下面的清单来自官方文档和作者自己说的教训,不是作者的恢复计划,也不是 err Friday 的修复方案。它的目的更窄:在提交夜之前,让网页版在真实托管环境里被完整玩一遍,这样坏掉的循环是你自己先发现,而不是玩家。
周一早上照着做
第一天就导出到真实托管环境,并且玩那个托管版,不只玩编辑器。只在编辑器里跑过的构建等于没测过。
在浏览器里完整玩一遍循环:故意死一次,确认复活和叙事推进真的发生。
在浏览器里走完每个 AI 状态:被发现、脱离接触,确认敌人回到默认状态而不是卡在警觉。
在浏览器里检查光标:只看到一个光标,移动手感正确。编辑器可能藏起一个只在网页版出现的问题。
有意识地决定线程开关。不需要就关掉线程支持;如果打开,确认服务器确实发了两个跨域头,或者启用渐进式网页应用 workaround,且走 HTTPS。
网页试玩时保持浏览器控制台打开,并在 Chromium 或 Firefox 里测。文档提到 Safari 有一些其他浏览器没有的 WebGL 2.0 问题。

