3.6 KiB
3.6 KiB
模板创建与加入房间接入设计
已确认依据
以 projects/Game_Surface_3 为迁移来源。平台不得定义、解释或改写具体玩法的 roomtype;它的生成、业务校验、人数解析属于子游戏。通用页面黑盒改造继续搁置,仅创建房间页采用可替换页面契约。
职责边界
- 平台加入页:Layer15_JoinRoom 的数字输入、删除、清空、提交、关闭与等待显示。输入限制和提交时机逐项对照原模板。
- 子游戏创建页:Layer27_CreateRoom 作为模板默认实现,封装自己的节点、布局、选项与交互。平台仅调用页面生命周期和状态接口,接收提交与取消操作,不依赖该页 group/Spirit 路径。
- 子游戏规则适配:由独立的进房前适配对象提供创建页资源和生成配置的能力;内部房间规则模型不进入平台。提交给平台的是已经由子游戏验证的原始 roomtype 数组。平台只检查传输层结构,不补规则默认值。
- 平台房间命令:按 docs/protocol/02 的 create_room、self_join_room 契约,补齐已有权威来源的身份、IP、定位字段,管理重复请求、失败、连接状态和页面生命周期。
- 进房后模块:沿用 GameEntry / GameModule / GameHost 边界,由平台提交房间状态并分发生命周期事件。创建页不能为了显示选项而提前实例化对局 GameModule。
模板兼容要求
原模板 01_SubGame_modify.js 的创建按钮当前发送固定示例数组,而非根据 Type_1/Type_2 选择生成数组。迁移保留这一事实,示例只放在模板适配层,不推导未知索引、不作为其他子游戏的缺省规则。子游戏替换创建页和规则适配后,自行提供完整配置。
原模板对局钩子多数为空。本次提供平台房间进入及子游戏接管边界、模板实现和验证,不声称已经实现任何具体玩法。不得继续使用会拒绝所有房间操作的 createLoginStageGameEntry 作为最终房间入口。
回包与生命周期
- 创建成功与加入成功分别解析。创建回包不能直接套用要求 players 数组的现有加入解析器;公共房间状态的建立须逐项追溯原 Desk.create_room 与登录玩家状态,不伪造服务器字段。
- 失败不进入房间,不创建对局模块,页面按原流程结束等待并显示错误。
- 成功更新权威状态后,再进入房间表现并通知子游戏;避免重复回包导致重复挂载。
- deskinfo 原样交给子游戏恢复,平台不解释其玩法内容。保留原工程恢复时机。
- 子游戏经受限 GameHost 发起平台动作;平台事件和状态快照是反向通知路径,不共享可变全局对象。
- 页面关闭、切场景、断线和退出时,解绑输入、取消页面等待与异步显示回调。
工作范围与验证
先完成模板创建/加入 UI 与进房前契约,再补平台创建请求/回包、模板 GameEntry 和房间接管;每一段都须可单独测试。已有 SDK、房间状态与座位组件先核对再复用,不另建第二套状态系统。
验证包含:原模板输入行为与选项行为;精确出站字段及 roomtype 不变;创建成功、加入成功、拒绝、重复提交、超时/断线、恢复、退出;模块生命周期;真实 Cocos prefab 引用、数字键盘、创建页操作、关闭与等待状态。协议验证使用本地测试数据,实际服务器联调结果单独报告。
所有 prefab/scene/meta 通过 Cocos MCP 编辑器操作;主检出分支工作,保留用户现有资源调整,不自动 stash。