两种同步模式:帧同步和状态同步 admin 2023-02-20 12:51:02 篇首语:本文由小编为大家整理,主要介绍了两种同步模式:帧同步和状态同步相关的知识,希望对你有一定的参考价值。 同步 所谓同步就是要一个游戏中的所有客户端的表现效果是一致的 就拿王者荣耀来说 十个玩家所有数据都是同步的,比如位置 技能cd 技能角度 单个英雄状态等 这个就是同步 同步是一个网络游戏的概念,单机游戏是没有同步的概念的 状态同步 原理 状态同步的战斗逻辑写在服务器端,包括技能释放,普攻,伤害,移动等等一系列内容 由于核心逻辑必须知道一个场景中的所有实体的情况,所以就必须把战斗逻辑写在服务器端 比如魔兽争霸的客户端承载有限,并不能把所有的地图的实体展现出来,所以客户端没有足够的信息计算全图的内容、 状态同步之下,客户端向是一个个服务器端数据的表现层 就拿一个英雄来说它所有的属性(血量,物理攻击,魔法攻击,物抗,魔抗等等)都是服务器端传输给客户端的 而且在属性发生改变的时候,服务器需要实时通知客户端发生了哪些改变, 客户端不能改变这些属性 他只是将服务器端传输过来的数据显示出来 再举个例子 假如说王者荣耀里边后移释放大招,这时候客户端通知服务端:我要释放大招 服务器通知客户端:在什么位置释放什么方向释放的信息 客户端通过这些信息创建一个特效在某地 然后向这个方向 飞行 然后服务端根据碰撞等逻辑判断 如果击中可击中的物体 产生相应的效果 帧同步 原理 帧同步下比较简单,服务端只负责转发,不做任何逻辑处理 假如在王者荣耀中一个英雄释放技能 他将会通知服务端 然后服务端通知其他客户端 实现同步的功能 比较著名的就是王者荣耀 流量消耗 状态同步比帧同步消耗大 在一个复杂的游戏中 在拿王者荣耀来说 所有属性 每个英雄独特的buff 其他英雄的debuff加起来可能好多好多属性 每次改变都要同步一次属性,那样的话消耗是巨大的 帧同步不需要同步属性 只需转发一次操作 所以状态同步的消耗是大于帧同步的 同理:状态同步的服务器压力比较大 因为要做更多的运算 战斗回放&观战模式 王者荣耀中有保存战斗回放和观战的机制 对于这两个状态同步比较好做 因为只需要保存这场战斗中所有人的操作即可 我们实现一个回放&观战服务器,战斗一旦开始,战斗服务器就给客户端发消息的同时 把这些消息传递给回放&观战服务器 如果有其他客户端请求观战或者回放,将回放&观战服务器上的数据按时间传递过去给客户端即可 安全性 状态同步的安全性比帧同步的安全性要高很多 因为状态同步的所有逻辑和数值都是在服务器端的, 如果想要作弊,就需要攻击服务器 但是攻击服务器的难度比客户端要高很多很多 而且容易被追踪 而帧同步所有数据都在客户端,所以解析客户端的数据就很容易达到自己想要的效果 开发效率 状态同步的游戏占主流,同时状态同步的游戏开发难度要高于帧同步 同一套方案可以给很多不同类型的游戏使用,都是转发操作(减少了服务端和客户端之间的沟通) 断线重连 状态同步的断线和好做,因为就是把整个场景和角色重新生成一次,各种数值根据服务端传给客户端即可 但是帧同步断线重连就比较麻烦,因为中间可能产生时间差 这可能造成游戏逻辑运行速度加速(追上现在进度) 这也就是王者荣耀中断线重连之后 游戏速度加快很多的原因 以上就是关于帧同步和状态同步的知识 希望对大家有所帮助 参考知乎大佬的文章 附上链接https://zhuanlan.zhihu.com/p/36884005 防外挂 上边简单说了一下服务器的防攻击机制高于客户端 所以状态同步的攻击难度高于帧同步 但是也不至于为了更难攻击 我们专门去使用状态同步去开发 所以就需要对帧同步进行放外挂(破解)机制 1.因为每个玩家都有独立的完整的运算逻辑,所以玩家之间可以进行互相校验(三人以上)以实现查出外挂玩家所在 2.添加一个空白客户端 只用于校验其他玩家(3人一下适用) 3.服务器辅助验证 以上是关于两种同步模式:帧同步和状态同步的主要内容,如果未能解决你的问题,请参考以下文章 C语言%详解 计算机英语词汇 您可能还会对下面的文章感兴趣: 相关文章 浏览器打不开网址提示“ERR_CONNECTION_TIMED_OUT”错误代码的解决方法 如何安装ocx控件 VMware的虚拟机为啥ip地址老是自动变化 vbyone和EDP区别 linux/debian到底怎么重启和关机 苹果平板键盘被弄到上方去了,如何调回正常? 机器学习常用距离度量 如何查看kindle型号