Documentation
¶
Overview ¶
statesync demo:基于同一个 pkg/gameloop.Room,换个 Handler 就从帧同步切到「状态同步」。
与 examples/gameloop(帧同步:下发"输入")的唯一区别在 OnTick 的策略:
- 服务器权威模拟:每帧把玩家输入应用到世界坐标(World.Step),这里算出"结果状态";
- AOI(兴趣区域):每帧建一次 pkg/spatial 网格索引;每个连接在"出口"按自己玩家 的视野半径查询 Nearby,只把可视范围内的实体发给该客户端——下发的是"状态"不是"输入"。
关键设计:Room 每帧只广播一份"权威世界"(*worldTick,内部对象,不直接上线); 每个连接的写循环把它投影成各自的 View(AOI 过滤后、可序列化)再下发。即 "内部全量扇出 + 出口按连接过滤"——状态同步 + AOI 的常见做法。
自带 3 个进程内 bot 验证 AOI:alice/bob 相邻(互相可见),carol 远处(谁也看不见它、它也看不见谁)。
运行:go run ./examples/statesync
Click to show internal directories.
Click to hide internal directories.