帧同步和状态同步

来源:互联网 发布:佳能照片打印机软件 编辑:程序博客网 时间:2024/06/06 17:02

帧同步和状态同步

去英雄互娱面试突然说到了对游戏中的网络实现问题,面试官告诉我两个名词:帧同步和状态同步
小白并不懂所以开贴记录下来


帧同步:

帧同步,根据wiki百科的定义是,一种对同步源进行像素级同步显示的处理技术,对于网络上的多个接入者,一个信号将会通过主机同步发送给其他人,并同步显示在各个终端上。同步信号可以是每帧的像素数据,也可以是影响数据变化的关键事件信息。

帧同步常被RTS(即时战略)游戏常采用。在游戏中同步的是玩家的操作指令,操作指令包含当前的帧索引。一般的流程是客户端上传操作到服务器, 服务器收到后并不计算游戏行为, 而是转发到所有客户端。这里最重要的概念就是 相同的输入 + 相同的时机 = 相同的输出。

状态同步

状态同步:同步的是游戏中的各种状态。一般的流程是客户端上传操作到服务器,服务器收到后计算游戏行为的结果,然后以广播的方式下发游戏中各种状态,客户端收到状态后再根据状态显示内容。状态同步最广泛的应用应该是在回合制游戏中。

状态同步其实是一种不严谨的同步。它的思想中,不同玩家屏幕上的表现的一致性并不是重要指标, 只要每次操作的结果相同即可。所以状态同步对网络延迟的要求并不高。像玩RPG游戏,200-300ms的延迟也可以接受。 但是在RTS游戏中,50ms的延迟也会很受伤。

自我理解

面试官问我魔兽世界和魔兽争霸的不同,通过上述的描述就可以比较清楚的知道:

针对魔兽争霸来说用的是帧同步,首先因为魔兽来说单位特别多,全部都占用服务器资源会很伤,只是广播玩家的操作,不需要计算,对于实时性也会很好,计算需求都在客户端使用。这也体现了我在玩赤潮下的一个问题,赤潮万到后期6个人超多个单位,所有计算都在手机上,渲染什么的都非常卡,特别影响体验,技能也丢不出去,这也是我后来不玩赤潮的主要原因之一。在想后期出安卓版的赤潮,有多少手机带不动。

针对魔兽世界来说用的是状态同步,实时性不是很好,并且占用服务器的资源,但是对于玩家来说屏幕的一致性并不是重要指标,我的每次操作都可以得到正确的结果,对游戏的体验性会好很多。但是在网络环境较差的情况下,使用状态同步,会造成我明明向前走了很多步,突然就会回退到前面的位置,服务器因为网络延迟没有收到你中间的一系列的操作指令。

参考1 http://blog.csdn.net/david_dai_1108/article/details/73437736
参考2 http://blog.sina.com.cn/s/blog_674f1bd20101omv7.html

原创粉丝点击