TOS 开发周记 11:把玩家移动事件理顺
本文根据 2025-12-15 至 2025-12-21 的 Git 提交回补。
上周刚把怪物移动接进分块地图,这周轮到玩家移动。提交不算多,却集中暴露了实时地图里很典型的问题:坐标由谁维护、事件发给谁、同一个玩家为什么会被创建两次。
服务端收拢移动规则
后端连续重构了 MapRoom 与移动 worker,并修正玩家移动流程。客户端则开始用六边形坐标 q、r 上报位置,随后调整用户移动事件和 player container。两边必须使用同一种坐标语义,否则服务端保存的位置、房间广播的事件和画面里的玩家节点很容易彼此错位。
客户端还修了重复用户与错误事件。这个改动很小,却说明问题已经从“能收到消息”进入“收到后能否正确更新唯一对象”的阶段。与此同时,主场景中的旧逻辑与多余日志也被清掉,让玩家管理不再全部挤在入口脚本里。
世界生成与素材继续补齐
地图生成规则也有一轮调整,主要落在地形生成脚本与 tile 常量。Godot 端加入山地素材,并连续替换、补充 tile 纹理。这部分没有改变联机协议,但它让服务端生成出的地形类型在客户端有了更完整的视觉对应。
小结
这一周做的事情并不华丽,更多是在校准玩家移动这条数据链:客户端提交坐标,服务端按规则处理,再由事件驱动客户端更新玩家对象。重复实例、错误事件和容器职责都是实时同步早期很容易踩到的问题,把这些理顺比继续堆画面功能更重要。
提交记录
| 日期 | 仓库 | 提交 | 原始说明 |
|---|---|---|---|
| 2025-12-16 | 后端 | cffa7b6 |
tmp |
| 2025-12-16 | 后端 | d0231eb |
tidy: refactor movement logic |
| 2025-12-16 | 后端 | efc8170 |
fix: player movement |
| 2025-12-16 | 客户端 | 180f720 |
feat: push user location with q and r |
| 2025-12-17 | 后端 | 2945b3f |
tmp |
| 2025-12-17 | 客户端 | 3315d4c |
fix: user movement event |
| 2025-12-17 | 客户端 | 4f5acc0 |
fix: player container |
| 2025-12-17 | 客户端 | e3a2631 |
tidy: clean code in main |
| 2025-12-17 | 客户端 | e95c28a |
fix: dup user, wrong event |
| 2025-12-18 | 后端 | a346a4c |
feat: update gen terrian logic |
| 2025-12-18 | 客户端 | 99a668c |
feat: add montain |
| 2025-12-18 | 客户端 | 9dba040 |
tidy: clean log |
| 2025-12-18 | 客户端 | b89aef5 |
ui: change texture |
| 2025-12-18 | 客户端 | d6329f2 |
ui: change more tiles |
TOS 开发周记 11:把玩家移动事件理顺
https://blog.util.online/2025/12/21/tos-weekly-history/2025-12-15-tos-weekly-11/