TOS 开发周记 11:把玩家移动事件理顺

本文根据 2025-12-15 至 2025-12-21 的 Git 提交回补。

上周刚把怪物移动接进分块地图,这周轮到玩家移动。提交不算多,却集中暴露了实时地图里很典型的问题:坐标由谁维护、事件发给谁、同一个玩家为什么会被创建两次。

服务端收拢移动规则

后端连续重构了 MapRoom 与移动 worker,并修正玩家移动流程。客户端则开始用六边形坐标 qr 上报位置,随后调整用户移动事件和 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
作者

amano

发布于

2025-12-21

更新于

2026-08-04

许可协议

评论