问题背景
应用帧同步实现多人联机游戏,补帧是一个绕不开的话题。惯例的弱网补帧,SDK曾经能够实现主动补帧,游戏能够不必关怀。对于客户端长时间敞开后从新进入房间或者游戏中途有玩家退出的场景,新退出玩家联机对战SDK默认是从游戏第一帧数据补帧,而联机对战服务器不会缓存所有的补帧数据通常是缓存5分钟历史帧数据,这时候单纯依赖SDK主动补帧就会补帧失败了。如何解决这个问题呢,这里提供一种思路。
解决方案
游戏中指定房主或者房间内某个玩家,定时保留以后游戏须要同步的数据状态(比方每分钟刷新一次,刷新周期至多要小于五分钟),并记录以后帧id,而后将该数据通过肯定伎俩同步给房间内其余玩家(比方通过批改房间属性,将其保留在房间属性中),当新玩家退出房间后能够从room实例中获取到房间属性,而后将其中记录的上一次房间状态数据进行解析,获取状态数据和帧id数据。
这时候只有以房间状态数据为根底,辅之以从帧id+1往后开始补帧就能够实现房间数据的同步了。
如何指定从某个id开始补帧呢?两种场景:
- 已启用SDK主动补帧场景,调用SDK提供的重置补帧起始id接口。
- 已敞开SDK主动补帧场景,调用SDK提供的手动补帧接口。
搞定!
官网材料:华为联机对战服务