
Darkwood 联机框架有大更新了
Darkwood 联机框架更新了多端实体状态同步逻辑。
这次主要不是增加几个网络消息,而是把实体同步的整体思路重新做了一遍:从之前进入世界时发送一份很大的世界快照,改成更接近 Minecraft 的主机权威复制架构。
现在由主机负责运行敌人 AI、物理、伤害和交互逻辑,客户端主要负责发送输入和显示主机状态。主机大约每秒捕获 20 次世界状态,只把发生变化的部分发给客户端。这样可以减少一次性同步大量实体造成的卡顿和断线,也能避免双方各自运行 AI 后出现不同的路径和随机结果。
实体现在有两层 ID:根据存档对象生成、跨加载尽量稳定的 Persistent ID,以及只在当前场景有效的短 Network ID。场景切换时会递增 Epoch,客户端会自动丢弃旧场景消息,避免重连后出现幽灵实体。
同步消息也拆开了:实体进入范围时发送 Spawn,状态变化时发送 Delta,定期发送完整 Keyframe 做校正,实体离开范围或被移除时发送 Despawn。状态本身还按位置旋转、生命值、开关状态和动画拆成 DirtyMask,只更新真正变化的字段。
主机现在会根据玩家位置管理兴趣范围,不同实体使用不同距离,边界还会留一点滞后,避免玩家在边缘来回走时实体不停 Spawn 和 Despawn。刚进入场景时,Spawn 也会分批发送,尽量压低瞬时网络峰值。敌人和物品的位置会在客户端插值,门窗、生命值和破坏状态则直接应用,后续 Keyframe 再负责纠正偶尔的丢包或漂移。
攻击、开门、开关物品等操作也改成了带序号的命令。主机会检查实体是否存在、是否在兴趣范围内、玩家距离是否合理,以及命令是否重复或过期,验证通过后才执行操作。
库存部分则从“客户端直接覆盖整库存”改成了带修订号的乐观事务。这样可以避免两名玩家同时拿取同一件物品时出现复制、回滚或数量叠加。
然后还加入了定期同步摘要和更完整的断线清理。存档传输协议也升级到了 v2。
这次重构之后,框架的同步骨架算是稳定了一大截,但距离真正长时间多人游玩还有不少测试要做,尤其是场景切换、动态生成实体、高延迟和库存并发操作。
GitHub 评论登录尚未配置完成
缺少:Client ID、评论仓库名、仓库所有者、管理员账号。 请在博客管理器的“评论系统配置”中填写 GitHub OAuth App 和评论仓库信息后重新部署。
