问题背景使用帧同步实现多人在线游戏,帧补是一个绕不开的话题。对于常规的弱网补帧,SDK已经可以实现自动补帧,游戏无需关心。对于客户端长时间关闭后重新进入房间或??游戏中途有玩家加入的场景,新玩家在线对战SDK默认从游戏第一帧开始补帧数据,并且联机对战服务器不会缓存所有补充帧数据。缓存历史帧数据5分钟。这时候单纯依靠SDK自动补帧是补帧失败的。如何解决这个问题,这里提供一个思路。解决方案在游戏中指定房主或房间内的某个玩家,定时保存当前游戏中需要同步的数据状态(比如每分钟刷新一次,刷新周期至少要小于五分钟),记录当前帧id,然后通过Synchronize将数据通过一定的方式传递给房间内的其他玩家(比如修改房间属性保存在房间属性中)。当有新玩家加入房间时,可以从房间实例中获取房间属性,然后对其中记录的最后一个房间状态数据进行解析,获取状态数据和frameid数据。此时只要以房间状态数据为基础,辅以frameid+1开始的补充帧,就可以同步房间数据。如何指定从某个id开始补帧?两种场景:开启SDK自动补帧的场景,调用SDK提供的重置补帧起始id的接口。SDK自动补帧的场景已经关闭,调用SDK提供的手动补帧接口。完毕!官方信息:华为在线对战服务
