TOS 开发周记 16:收拾分块订阅、怪物状态与客户端结构
本文根据 2026-01-19 至 2026-01-25 的 Git 提交回补。
这一周的提交全部落在周末,内容也很像一次集中清理:服务端修 worker 与怪物状态,客户端修分块订阅和重复实例,同时把 API、事件与欢迎页重新组织了一遍。
怪物状态不只存在于画面里
后端修正负方向移动逻辑、掉落物位置和 worker 停止流程,随后让怪物生命值能够持久化,并加入独立的怪物日志。堡垒相关代码也在同一轮修改中得到修正。
客户端对应处理了重复怪物和受击闪烁。前者涉及 WebSocket 消息到场景节点的唯一映射,后者则是纯表现层反馈;两者放在一起,刚好体现出服务端状态与客户端呈现需要分别维护。
分块与事件入口继续瘦身
客户端修正 chunk subscription,涉及 API、WebSocket、地图场景与坐标工具。地图不断移动时,订阅哪些 chunk、何时取消旧订阅,直接决定客户端会收到哪些世界对象。
另一笔较大的整理用 EventBus 取代场景间的直接耦合,并移除旧的 Colyseus 消息处理器;API client 也被重新拆分。欢迎页和游戏配置场景则为启动流程补了一个更明确的入口,同时加入中英文翻译资源。
此外还新增一个图片去边工具,用于处理素材边缘。这是开发辅助脚本,不属于运行时玩法。
小结
这周的关键词是“边界”:worker 何时停止、怪物状态保存在哪里、一个怪物只能对应一个节点、客户端只订阅需要的分块、场景之间通过什么传递事件。它们都不是新系统,却决定了已有系统能否继续扩展而不越来越难维护。
提交记录
| 日期 | 仓库 | 提交 | 原始说明 |
|---|---|---|---|
| 2026-01-24 | 后端 | 4561d7e |
fix: stopWorker |
| 2026-01-24 | 后端 | 4e9ddb6 |
fix: drop items position |
| 2026-01-24 | 后端 | 6366a1a |
feat: fix negative monster movement logic |
| 2026-01-24 | 后端 | 9acddb8 |
feat: move types |
| 2026-01-24 | 客户端 | 334b40a |
feat: add cli to remove edge |
| 2026-01-24 | 客户端 | 672de38 |
fix: dup monsters |
| 2026-01-24 | 客户端 | 6e1efdf |
chore: update img |
| 2026-01-24 | 客户端 | f165967 |
fix: chunk subs |
| 2026-01-24 | 客户端 | ff30c76 |
fix: monster flash |
| 2026-01-25 | 后端 | 39dd112 |
fix: persist health |
| 2026-01-25 | 后端 | e6fe26e |
feat: add monster logs, fix forterss |
| 2026-01-25 | 客户端 | 5cba376 |
tidy: refactor api_client |
| 2026-01-25 | 客户端 | cac02a0 |
feat: add welcome.tscn |
| 2026-01-25 | 客户端 | db4a909 |
tidy: use eventbus to clean codes |
TOS 开发周记 16:收拾分块订阅、怪物状态与客户端结构
https://blog.util.online/2026/01/25/tos-weekly-history/2026-01-19-tos-weekly-16/