一句话说清整个系列

发布时间:2026/9/12 23:56:09

一句话说清整个系列 5 个阶段 × 6 步工作流进化 × 13 个知识主题 从 0 到 1 做一个 AI 驱动的多人游戏需要知道的一切。我用自己的项目 GTS-Play巨大娘主题单机产品「巨大娘的玩耍」已发布 v1.0多人在线版基于 Three.js ReactLerna monorepo从单机改多人的真实经历把每个决策、每次踩坑、每次重构都记下来。时间线速览5 个阶段basic1 帧同步 → new_basic2 状态同步 → 大重构 → 迭代开发 → SCF 部署↓ ↓ ↓ ↓ ↓P6 P7 P8 P9 P10P6 帧同步basic1 原型— 2026年5月底一切从这开始。basic1 是我自己手写的帧同步原型通信层使用了 TSRPCWebSocket。方案很经典服务端只做中继转发指令所有客户端同步执行相同的逻辑确保结果一致。看起来很美。服务端超级轻量只需中转指令包。每个客户端独自计算物理、碰撞、游戏逻辑。理论上只要种子一样、指令顺序一样各端结果就一样。但实际跑起来第一个问题就是浮点数各平台不一致。同样的位置计算用 Chrome 和用 Firefox 跑两帧就开始偏移。我拉了两台电脑手动对比发现 Math.atan2 和浮点加减法在各浏览器里的 NaN 处理、denorm 行为微妙不同差一个 ULP 都会在下一帧放大。当时我问 AI 原因它自信地说「JavaScript 的 IEEE 754 浮点是确定的」但实际跑起来却不是那么回事。第二个问题是代码里不慎用了 Date.now() 做时间戳。按 Lockstep 理论所有客户端必须使用完全相同的逻辑时钟但作为同步敏感细节被我忽略了。结果每个客户端自说自话地推进时间游戏进程很快就不一致了。第三个问题暴露得更晚单人逻辑与多人进入逻辑耦合。从单机小 demo 改多人时保持了原有的流程——必须从单人关卡创建进入、再切换到多人。这导致测试极其麻烦每次都要走一遍完整的单人创建流程。2026年5月底到6月初我在 basic1 上磨了一周。到后来我已经清楚——Lockstep 虽美但手动维护所有同步细节实在太难。6月初我决定放弃 basic1换了方向。P6 会完整展开这个阶段的故事。P7 状态同步new_basic2 原型— 2026年6月上旬basic1 的 TSRPC 通信层保留了下来但同步模型要彻底换——从帧同步改为服务端权威状态同步服务端统一算 tick所有客户端只做渲染。这个改动是翻天覆地的服务端新建 room-service15FPS tick 循环读命令 → 执行逻辑 → 广播状态客户端只渲染不再参与逻辑计算帧同步 → 状态同步之前写的 Lockstep 代码几乎全部作废TSRPC 本身在这个阶段也踩了坑bigint 传不过去。TSRPC 内部用 JSON 序列化JSON 不支持 bigint。服务端用 bigint 做时间戳客户端收到的却是 {“n”:12345} 对象直接崩溃。最后把所有 bigint 换成 string 或 number 了事。更关键的问题是——我对代码的控制权在快速下降。之前辅助编程时出现多次「AI 拍脑袋修 bug」的问题我说位置不同步AI 不加日志排查而是直接在客户端加一行 position serverPosition掩盖了真正的根因。新阶段我决定换工具——引入 OpenClaw让它作为我的人机接口全面接管日常开发。这正是后续工作流进化的开端。P7 会完整展开状态同步方案的设计和坑。P8 大重构Monorepo 双服务 Logic 共享层— 2026年6月8日-6月12日状态同步 MVP 跑通后代码处于可运行但不可维护的状态。demos/new_basic2/ 目录里前端和逻辑搅在一起服务端代码也是一团乱麻。6月8号这天我和 OpenClaw 面对一个关键决策要不要真正重构架构重构意味着做几件事从 demos/ 目录移到真正的 packages/frontend/接管单机版的整个前端抽出 packages/logic/ 共享层——纯逻辑无任何框架依赖room-service 和 match-service 依赖 logic 包引入 IRenderer 接口抽象与 Three.js 解耦这个决策之前我犹豫了很长时间。单机版的前端代码量巨大Three.js React Ant Design MMD FBX代码耦合度极高。AI 以前在这个代码里做过几次修改每次至少改坏一两个地方。但我提出的方案是不改单机代码只做扩展。在单机代码基础上加多人渲染层、加多人逻辑层、加 IRenderer 接口。多人部分的代码全部新建不影响单机。重构过程很痛苦。遇到的坑循 环 依 赖logic 包引用 commonlib、frontend 引用 logic、room-service 引用 logic——tsconfig.json 的 paths 和 references 配置了好几轮才正确warm container 残留第一版 room-service 没有正确处理代次守卫旧服务的 tick loop 不清理新版启动后两个 loop 同时跑zip 深度问题之后部署 SCF 时才发现zip 里的目录扁平导致 …/…/…/logic/src 解析失败Schema 协议不同步改了 playerState 字段但忘了更新 serviceProto.ts数据传过去对不上为了彻底解决不可维护的问题我还引入了 ReScript 来重写 logic 包的逻辑层代码。ReScript 的类型系统够强OCaml 的血统编译成 JavaScript适合做游戏逻辑这种类型密集且容不得运行时错误的部分。但 ReScript 又带来了一整条依赖链的问题后来部署时差点被 rescript/runtime 的 ESM 问题搞崩溃。这是后话。P8 会详细展开这次大重构的全过程。P9 迭代开发Tick Loop 碰撞检测 状态管理演进— 2026年6月13日-6月29日重构后的代码结构清晰了可以真正进入产品迭代。这个过程大约持续了两周半按日迭代。每天的工作模式基本是兄弟下需求 → OpenClaw 调度 OpenCode 写代码 → 跑测试 → 验证 → 记录 → 收工。典型的功能点MMD 巨大娘接入把单机版的 MMD 模型白希.pmx引入多人版用 VMD 动画替换 FBX 动画。这里有一个经典坑MMD 的脚部 IK 在多人 Transform 下失效。排查了一下午最终发现是 meta3d 修改了 Three.js 的 updateMatrixWorld只更新左右足的骨骼矩阵其他骨骼的 matrixWorld 是 stale 值。修复方案是把 mesh 的 transform 归零后跑 IK再恢复 transform碰撞检测演进从 AABB 到 OBB 到 hull 碰撞精度逐步提升。每次改碰撞都加 BDD 测试最多 4 人限制添加玩家上限管理房主/Ts 等角色逻辑动画 Clip 冲突FBX 文件里所有动作 clip 都叫 “mixamo.com”。mixer.clipAction(“mixamo.com”) 永远返回第一个导致所有人动画相同。修复加载后重命名 clip退出清理beforeunload 发 disconnect服务端清理玩家状态。HMR 热更新时 WebSocket 断连导致玩家意外退房的问题折腾了好久这个阶段最有意思的是 OpenCode 的引入。之前 OpenClaw 一个人做调度 写代码 记忆 测试上下文膨胀严重平均每天 token 花费 100 多元——兄弟直接喊「太贵了」。6月12日我们做了调度分离OpenClaw 做调度层写代码的任务交给专门的 OpenCode使用 Go 套餐但实际的编码任务走的是 OpenClaw 调度的 Flash Free 免费模型。这个改变让月费降了 96%。P9 会展开迭代开发的具体流程和功能演进。P10 SCF 部署 — 2026年6月30日写再多代码不上线都是白搭。6月30日我们开始部署到腾讯云 SCFServerless Cloud Function。这一天是所有踩坑的大总结。如果说前阶段是「写代码难」这一天就是「让写过代码跑在别人的机器上更难」。一共踩了 6 个连环坑严格按出现顺序undici7 File is not defined — cloudbase/functions-framework 链式依赖 undici7需要 Node 20 的 File APISCF 只有 Node 18。解决去掉 framework直接启动 TSRPC HttpServerzip 深度补偿 — 扁平 zip 下 …/…/…/logic/src 解析到根目录外。解决zip 内加 svc/ 子目录scf_bootstrap 权限 — Windows 压缩不保留 x。解决.NET ZipArchive reflection 设 ExternalAttributesESM/CJS 冲突 — rescript/runtime/package.json 有 “type”:“module”。解决打包时删掉Module._load hook 失败 — 尝试拦截 Node 模块加载复杂且不稳定。解决直接注入 node_moduleswarm container 定时器残留 — 旧 tick loop 不清理。解决代次守卫自毁每个坑从发现到修复都经历了「症状 → 排查 → 根因 → 修复」的完整链路。最终我们写了一套自动化部署脚本 deploy-scf.js纯 Node.js 零依赖一行命令搞定打包 上传 配置 BDD 验证。P10 会完整展开这 6 个坑的逐坑故事。工作流进化6 步从手动到全自动AI 辅助编程单机→ OpenClaw 全自动 → 引入 OpenCode → TDD Skill 自动部署 E2E Specs(DeepSeek网页) (0代码指挥) (调度分离降本) (流程标准化闭环)Step 1AI 辅助编程单机开发阶段2026年5月之前这个工作流并非从多人版才开始。早在单机版「巨大娘的玩耍」的开发中我就一直在用 AI 辅助编程。基本模式是「人指挥 AI 写代码」的传统做法用 DeepSeek 网页版写需求 → 把代码贴进去让 AI 分析/改 → 手动复制粘贴到 VSCode。网页版我用来优化局部代码、实现算法、资料搜索、出设计方案Vs Code的Trae 插件我安装了用来做代码补全。痛点很明确大部分代码都是由我手写要在 DeepSeek 和 Vs Code 之间来回切换AI 的上下文都要由我从代码库中粘贴过去Trae虽然可以获得整个代码库的上下文但是太慢了而且不准确且免费版有限制。Step 2OpenClaw 全自动写代码零代码指挥阶段2026年6月上旬引入 OpenClaw 是一个转折点。OpenClaw 的本质是「一个能自己用工具干活的 AI」。我不再写代码只需告诉它架构设计、单机逻辑在哪、要改什么方向——它会自己去读单机代码、理解逻辑、写多人版本。当时的做法是我在浏览器的OpenClaw窗口WebChat中喊「小龙虾」OpenClaw 的昵称给它需求OpenClaw 读代码 → 分析 → 写代码 → 编译 → 报结果我再通过飞书反馈效果提升非常明显。以前一个简单功能至少半天有了 OpenClaw 半小时搞定。复杂功能以前要 2-3 天现在半天到一天。但新问题来了OpenClaw 做所有事情——调度、分析、写代码、跑测试、记忆管理——上下文里夹带大量资产token 消耗极高。平均每天 100 多元。兄弟说「这才几天快上千了」让我必须降本。Step 3引入 OpenCode 写代码调度分离2026年6月12日问题清楚了OpenClaw 负责调度层记记忆、管流程是它的强项但写代码这件事本身就是 token 大头——应该交给专门干这个的工具。方案很直接OpenClaw 调度 OpenCode 来写代码。做得更巧妙的一点是 OpenClaw 并不把全部上下文丢给 OpenCode 让它从头理解。OpenClaw 先分析需求、写好 Brief、标好要改的文件和改动要点再让 OpenCode 执行具体的改动。OpenCode 不关心项目全局和记忆只关心这个 brief 里的事。模型方面OpenClaw 调度 OpenCode 时使用它的 DeepSeek Flash Free 免费模型。每天有免费额度超出后自动回退到 Flash 模型——二者是同一个模型缓存命中率不受影响。而 OpenCode 本身使用的是 Go 套餐按量付费。这一改当天 token 费用从 100 降到个位数。兄弟表示满意。Step 4-6TDD 流程固化 Skill 标准化 自动部署 E2E 自测 Specs2026年6月中旬-7月初完整的 6 步工作流进化为AI 辅助编程 → OpenClaw 全自动 → OpenCode 引入 → TDD → Skill 固化 → 自动部署/E2E/Specs。后面几步是持续优化TDD 流程先写 BDD 测试让 bug 真实 RED → 再修复让测试 GREEN。这是代码质量的基础。任何没测试覆盖的代码都被视为「不存在的代码」Skill 固化把固定流程写成 SKILL.md。比如「部署流程 Skill」「E2E 测试 Skill」「记忆保存 Skill」。AI 严格执行不走样自动部署deploy-scf.js 一键部署部署前自动跑 BDD 验证E2E 自测 根因修复让 AI 自己复现 bug → 打日志定位 → 修复 → 验证。配合 Chromium CDP 实现 WebSocket 连接的验证Specs 体系先出规格再开工。Main Specs 概览Delta Specs 讲清楚这次改动什么、不动什么。兄弟确认后再干活每一步的详细过程在 P12-P16 工作流进化 篇展开。测试体系进化从零到三层的历程测试体系的建立不是一蹴而就的它跟整个项目的成熟度同步演进时间 测试状态 痛点 转折事件basic1 时期 (5月底) 没有测试全靠手动跑 修了 A bug → B bug 回归 → 再修 → 又回归 同一个 bug 一周内回归 3 次new_basic2 (6月初) 单元测试AI 自动写 单元测试 mock 太多测不到真实路径 AI mock 了 60 行代码实际测试只有 5 行大重构后 (6/9) BDD 集成测试用 Cucumber BDD 不经过真实服务端mock 了整个 Server 测试全通过但部署后挂了迭代开发 (6/10-6/28) 50 BDD 场景6 个模块 没有 E2E 环境位置跳变从日志看不出来 位置同步 bug 查了一周OpenCode 引入后 E2E 自测Playwright CDP AI 修 bug 不看日志拍脑袋修 一个 bug 修了 7 轮没修好Skill 固化后 自动化验收gts-acceptance 流程太长人忘了某步 部署前忘记重启 roomWS 断连每个阶段的测试故事分别在相应篇中展开P9 讲 BDD 在迭代中建立P14 讲 E2E 自测的引入P21 讲完整的测试策略体系。知识管理速览P17-P2913 个主题主题 一句话说清编码规则体系 基础/模块/流程三层规则 agent-context.md 宪法机制——不是一开始就有的是 AI 犯错后建起来的重构标准 审查清单——最高频 bug 是 End 逻辑重置每次都要专门检查Specs 体系 Main Specs Delta Specs 变更管理。Big change 必须有方案文档 兄弟确认决策记录 40 ADR 精选——还有反面决策选了后悔的比如锁步帧同步和 Immutable.js测试体系 单元 AI 自动集成半自动带 mock 问题E2E 手动辅助配合 PlaywrightToken 优化 月费从 3000 降到几百元的实操方案调度分离 缓存优化 上下文精简记忆管理 33 个锚点词检索协议。每天自动存档对话结束后强制总结Agent Brief 体验式反馈 技术 spec——给 AI 反馈「角色走路不自然」比「radius 设 360」更有效部署管理 SCF 双环境production/test双实例room1/room2全自动化工具链 23 个 Skill 全家桶从 gts-save-flow 到 gts-e2e-test 到 gts-deploy前端性能 SoA、帧管理、MMDFBX 双轨——更是个架构决策为 WebGPU 多线程铺路通信可靠性 WS 断连、重连、竞态、防御式编程。beforeunload 发 disconnect 修复了 HMR 断连问题反模式与设计模式 6 类坑 root cause 17 个可复用模式——我自己常犯的错也列进去了坑的速览清单
延伸阅读

更多相关文章

2026/9/9 5:08:20

从数据泄露到合规隔离:基于Go语言构建FISCO BCOS BAAS平台多租户隔离实战

一、引言:多租户隔离——BAAS平台的合规生命线 在前三篇文章中,我们分别介绍了基于FISCO BCOS的BAAS平台整体技术路线、高可用架构中的多节点负载均衡,以及大规模集群管理的实现方案。然而,当BAAS平台真正服务于多个企业、多个业务线、多个机构时,一个关乎平台生死的问题…

2026/9/12 10:12:11

diff2html深度解析:从Git差异到精美HTML的专业转换指南

diff2html深度解析:从Git差异到精美HTML的专业转换指南 【免费下载链接】diff2html Pretty diff to html javascript library (diff2html) 项目地址: https://gitcode.com/gh_mirrors/di/diff2html 在软件开发、代码审查和版本控制过程中,Git差异…

2026/9/12 23:51:16

YOLO烟盒检测实战:小目标标注校验与训练调优全链路

简介:本资源是面向计算机视觉初学者与算法工程师的烟盒目标检测专用数据集,专为YOLO系列模型训练与验证设计,适用于工业质检、包装识别等实际场景。数据集共1934张高质量图像,已按标准划分训练集、验证集与测试集,并提…

2026/9/12 23:51:16

lucide-solid 使用指南:在 SolidJS 应用中集成 Lucide 图标库

lucide-solid 使用指南:在 SolidJS 应用中集成 Lucide 图标库 【免费下载链接】lucide Beautiful & consistent icon toolkit made by the community. Open-source project and a fork of Feather Icons. 项目地址: https://gitcode.com/GitHub_Trending/lu/l…

2026/9/12 2:05:33

超人会飞不算本事:系统稳定依赖清晰规则与边界设计

开头先不绕弯子。“#斯坦李吐槽dc 所以超人是无缘无故会飞的嘛哈哈哈哈哈哈哈锤哥真是技术人才啊!#雷神 #复联”这类调侃式短标题,第一波冲击力在于它把两个宇宙的角色塞进同一个吐槽箱里,但细想一下就能发现,它真正碰到的根本不是…

2026/9/12 3:55:12

超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论

把“蜘蛛侠 vs 超人”放在 CSDN 上聊,可能很多人第一反应是走错片场了。但如果把这两个角色看成“两个持续运营了 80 多年的文化产品”,你会发现,这场比较本质上是两个不同 IP 策略的长期结果对比:超人赢在定义了整个超级英雄题材…

2026/9/12 10:09:03

基于CNN的调制信号识别:MATLAB实现时频图分类实战

简介:本资源是一套面向通信工程与信号处理方向学习者、研究者的深度学习实践方案,聚焦调制信号自动检测与识别这一典型无线通信任务,解决传统方法依赖人工特征、低信噪比下性能下降等痛点。压缩包共12个文件(10.73MB)&…

2026/9/12 0:04:17

MATLAB仿生优化框架:长鼻浣熊算法多策略融合实现

简介:本资源是一份面向智能优化算法研究者与MATLAB初学者的仿生智能算法实践代码包,聚焦于长鼻浣熊优化算法(COA)的多策略改进与性能验证。针对传统COA易陷局部最优、收敛精度不足等问题,作者融合Circle映射初始化提升…

2026/9/12 0:04:17

【JAVA毕设源码分享】基于 JavaWeb 的校园一卡通管理系统的设计与实现 基于 JavaWeb 的校园卡业务管理系统(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/9/12 0:04:17

【JAVA毕设源码分享】基于 Java 的图书馆借阅管理平台的搭建与实现 基于 Java 的图书馆综合管理系统(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/9/12 6:29:36

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/12 14:32:17

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/12 6:37:43

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码