TOS 开发周记 10:地图分块接上怪物移动

本文根据 2025-12-08 至 2025-12-14 的 Git 提交回补。

这一周的主线很清楚:让地图不只是能够分块加载,还要让怪物真正活在这套分块世界里。客户端和后端都围绕 chunk、坐标与事件做了不少调整,一边推进,一边修正接口之间没对齐的地方。

从 chunk 坐标到异步绘制

后端先统一了 chunk 内 tile 的基础坐标,并把地图元素随房间数据一起推送。客户端随即把 tile 绘制改成异步流程,也修过一次 chunk id。这里看似只是渲染方式变化,实际上依赖服务端给出的分块与坐标能够稳定对应。

地图表现也继续补细节:水面改成动态 tile,部分地块素材更新,调试面板被挪到更方便观察的位置。临近格选择则让六边形地图上的交互范围更明确。

怪物移动进入 worker

后端新增怪物移动 worker,随后把更多地图工作移入 worker,并补上可达性检查、移动一致性和休息状态。提交记录里还能看到 /regions 卡顿与数据库连接超时的修正;我只把它们视为当时针对具体调用链的整理,不据此推断最终性能结果。

客户端这边先接入 WebSocket 中的怪物数据,再支持服务端移动事件,最后抽出 monster manager。也就是说,怪物的位置与状态由后端推进,Godot 端负责接收事件、维护实例并绘制出来。期间清理事件、替换错误的 chunk id,正是这条链路逐渐成形时必须处理的接缝。

小结

回头看,这周不是单独完成了“地图”或“怪物”某一个功能,而是第一次把分块数据、后台移动逻辑和客户端表现连成了比较完整的闭环。许多提交仍带着明显的迭代痕迹,但后续战斗系统需要的世界状态已经开始有了落脚点。

提交记录

日期 仓库 提交 原始说明
2025-12-08 后端 a76f0c0 feat: chunk tiles base tile coordinate
2025-12-08 后端 d767674 feat: push elements in chunk room
2025-12-08 客户端 e328620 feat: async render tiles
2025-12-09 客户端 0c8228f feat: draw monsters in ws
2025-12-10 后端 9f1cfcc feat: monster movement workerr
2025-12-11 后端 a2e36bf feat: handle monster movement in worker thread
2025-12-11 后端 e6df04a fix: db connection timeout
2025-12-11 后端 e8a01ab fix: laggy in /regions
2025-12-11 客户端 4d8fd39 tidy
2025-12-11 客户端 8b34075 feat: support monster movement with server event
2025-12-12 后端 82f8778 feat: use worker to do more things
2025-12-13 后端 01a7a52 fix: consistent movement
2025-12-13 客户端 32d6707 fix: chunk id
2025-12-13 客户端 38d1ecc feat: dynamic water tile
2025-12-13 客户端 5c3afae feat: move debug panel
2025-12-13 客户端 9fb30b9 tidy: clean eveents
2025-12-13 客户端 e88666f feat: monster manager
2025-12-13 客户端 f3c603a feat: closer-square selection
2025-12-14 后端 62c0288 feat: check reachability
2025-12-14 后端 b9503bd feat: support rest for monsters
2025-12-14 客户端 8e627de ui: change some tiles
作者

amano

发布于

2025-12-14

更新于

2026-08-04

许可协议

评论