最近在看 ECS 架构的优点,后面忽然想到,基于节点的系统设计确实很容易在设计阶段就能够得到是现阶段想要的效果以及如果想要更改逻辑只需要连连看即可

但是有这么一种情况比如 Moba 类的游戏,如果出现一个人断线了,假设技术已经实现的情况下,这时候好处理,其他人按照预测逻辑来继续推演即可,但是如果那个人断线重连了呢?

这就出现了一个问题,帧同步是按照一帧一帧的输入确认向前进的,所以如果断线重连,假设无法计算快照 (即可类比为当前状态的哈希值,且可以解码) 的情况下,就只能从第一帧向前不断推演,这个过程是很慢的,而且不能跳过 (因为跳过就可能出现小怪血量出现问题之类的情况)。

而 ECS 的思想恰巧可以解决这个问题,因为一切皆数据,那就只需要把当前帧的数据压缩发给客户端就可以了,即必然存在当前帧的快照。

但事实上还有个问题,那就是如果说当前帧必然存在快照,这个快照是存在在哪里的?服务器还是客户端,理想情况下是不会让客户端把当前状态打包发回给服务器再发回给重连的客户端。

所以我想的是,会不会断线重连下服务端也会同步的运行一个游戏逻辑(那么这和状态同步又没有区别了?),然后把新状态发送给重连的那个客户端。