众所周知 ,解决网络延迟问题,目前主要有帧同步和状态同步(又称为CS同步)两种网络同步解决方案。
1、状态同步:每个客户端发送各自操作到服务器,服务器统一计算后将状态结果同步给各个客户端,客户端根据状态显示内容。
2、帧同步:一般流程是客户端上传操作到服务器,服务器收到后并不计算游戏行为, 而是转发到所有客户端,客户端接受到操作以后,通过运算可以达到一致的状态,这样的情况下就算单位再多,他的同步量也不会随之增加。
对于使用状态同步的游戏而言,不同玩家屏幕上的表现一致性并不是重要指标, 只要每次操作的结果相同即可。(所以大家会发现国产RPG游戏的动画特效一般比较华丽, 攻击的时候给人感觉是击中了,且放技能之前一般也有一个动画前摇。这实际上就是使用了状态同步,玩家将攻击请求提交给服务器。等服务器结果返回时,动画也播放完毕了,之后就是统一的伤害效果和结算。
今天我们主要讲后者,即帧同步。
在说到帧率前,首先要了解一个叫帧率的概念。根据百度词条的解释:帧率就是每秒的帧数(fps)或者说帧率表示图形处理器处理场时每秒钟能够更新的次数。正常情况下,帧率>30 画面就能保持基本流畅,理论上来说,越高的帧率可以得到更流畅、更逼真的动画。
至于帧同步则是从帧率上衍生出的概念。游戏里同步的是玩家的操作指令,一般的流程是客户端上传操作指令到服务器, 服务器收到后并不计算游戏行为, 而将数据转发(帧同步不同步状态,只同步玩家的操作指令,所以这里的数据其实是指令)给各个客户端,各客户端立即根据当前自己所掌握的游戏数据,模拟出一个游戏进行状态,不需要等到服务器的返回消息。
或者具体我们可以这样理解同步帧:我们可以把游戏的前进分为一帧帧(这里的帧和游戏的渲染帧率并不是一个,只是借鉴了帧的概念,一个自定义的帧。),相当于每一帧是服务器集齐了所有玩家操作指令,才进行计算并进入下一步广播给所有的玩家。否则就要等待最慢的玩家,从而保证帧一