房间状态与开局流程
分清五类状态
| 状态来源 | 负责内容 |
|---|---|
| 房间数据 | 成员、席位、角色/地图选择、准备和房间版本 |
| 连接 | 建立中、连通、断开和恢复 |
| 本地资源 | 下载、解码、场景与视觉准备 |
| 对局 | 规则/种子、局代次、开局确认、playing、终局 |
| 界面 | 当前操作、等待原因、错误与退出反馈 |
界面依据真实快照和事件渲染,不用本地按钮颜色充当对方已准备。房间存在不等于对局可恢复,连接完成不等于场景已加载。
更新与冲突
修改自己的角色只更新自己的字段,不回写过期的完整成员列表。按版本处理并发更新,冲突后回读再应用原意图。地图/规则改变是否清除准备由作品明确规定;不能顺带把无关成员状态重置。
每次异步操作捕获当前房间与局代次,返回时再次核对。取消后迟到的加入/加载响应不能重开旧房间;清理结果未知时核对原操作,不创建新身份留下重复席位。
资源与双方开局屏障
双方可并行加载。各端上报自己的真实完成状态;快端显示“本机已准备,等待对方加载”和已等时长,不编造对方百分比。场景节点都存在后才发送依赖这些节点的消息。
双方规则与局代次一致、资源就绪、游戏握手完成后,再共同倒计时和放开输入。初始化回调先安装接收器、启动握手后返回;不要在阻止消息交付的回调中等待远端 ACK。
倒计时边界、playing 确认和重开请求都按当前局处理,一端进入 playing 后也不能丢弃另一端当前局的取消/恢复消息。一次开局失败与房间保留分开,不能因慢加载直接解散房间。
后台、退出与同房重开
短暂切后台不等于主动离开;回来回读当前房间与连接状态。主动退出显示确认后的结果,迟到响应不污染新房间。另一窗口接管后旧窗口停止争抢;不要自动抢回。
重开创建新局代次并清理旧战斗输入、监听与资源引用,成员/选角保留按作品规则处理。角色、地图、连接与准备信息都要真实填入界面,失败保留原选择和重试入口。
本地自测
双方各连续选角 20 次,并发换图/准备、分别慢加载、取消后迟到完成、倒计时末帧重开、后台返回、退出再进和同房第二局。检查两端成员与规则一致,不串局、不重复开局、无幽灵席位。