最近在研究如何将现有帧同步游戏改造为状态同步。目前帧同步游戏客户端运行时间久了会偶尔会出现不同步问题。

在网上看到一个改造方案:

简单来说就是在保持帧同步方案的基础上,将客户端的逻辑代码部署到实时服务器上。玩家客户端A和B操作后,直接进行本地渲染,同时将帧数据发送到帧同步服务器,帧同步服务器封装帧消息后进行广播,广播范围包括实时服务器。实时服务器在状态变化时发送游戏状态到客户端,客户端进行校验,一旦发现端云状态不一致,则以实时服务器结果为准。此时有两个方式:一直接更新客户端状态,优点是简单,缺点是有跳变。二是按照补帧重新计算,相对更平滑。

这套方案下来,端云一套代码逻辑,开发者无需重复编写云侧代码,游戏逻辑更新直接copy到云侧即可;没有跟手延迟;单机改联机不需要复杂的预测回滚机制,发现不同步则回放追帧即可。