帧同步服务器?位同步和帧同步

游戏里的帧同步机制

在多人对战的游戏中,游戏的每一方客户端需要保持每一个时刻大家的数据是一致的,常见的同步方式分为帧同步和状态同步,帧同步服务器不需要知道游戏逻辑,只是将客户端的操作进行转发,然后客户端自己计算逻辑,状态同步是服务器计算游戏逻辑,并将角色状态返回给客户端,客户端直接使用服务器返回的状态即可。常见的RTS,Moba一般是帧同步,mmorpg一般是状态同步。

总所周知,游戏是一帧一帧渲染在屏幕上的,我们一般称之为渲染帧,渲染帧是不稳定的,如果一帧计算的东西太多或者画面太复杂,这一帧的时间可能会比较长,同一款游戏在不同的CPU,显卡上,渲染帧也是不尽相同的。而帧同步的帧是指逻辑帧,非渲染帧。我们以2台手机为例,他们需要同步,意味着他们的数据是一致的,如何保证他们数据一致呢,保证它们的起始状态是一致的,执行操作的时间是一致的,执行的操作是一致的,那么2台机器的结果一定是一致的。假如我们将游戏固定为1秒20个逻辑帧,即每50ms执行一次逻辑帧,2台手机都将在第5帧的时候执行A的移动操作,都将在第12帧的时候执行B的攻击操作,这样2台手机无时无刻不保持着一致,这就是帧同步的概念。

在做帧同步之前,需要头脑清晰的知道所有的游戏逻辑都需要拆成每个逻辑帧去执行,例如计算伤害,生命恢复等,这些都是在每一个逻辑帧去做的事情。游戏按照你的逻辑帧,不停的计算着数据,这样游戏就按逻辑帧走起来了,至于渲染到屏幕上,渲染30帧还是60帧,跟你的数据运算没有关系。

流程图如下:

帧同步和状态同步

对于联网游戏来讲,同步的方式主要分为两种,状态同步、帧同步。

1、状态同步:顾名思义,是指的将其他玩家的状态行为同步的方式,一帮情况下AI逻辑,技能逻辑,战斗计算都由服务器运算,只是将运算的结果同步给客户端,客户端只需要接受服务器传过来的状态变化,然后更新自己本地的动作状态、Buff状态,位置等就可以了,但是为了给玩家好的体验,减少同步的数据量,客户端也会做很多的本地运算,减少服务器同步的频率以及数据量。

2、帧同步:RTS游戏常采用的一种同步技术,上一种状态同步方式数据量会随着需要同步的单位数量增长,对于RTS游戏来讲动不动就是几百个的单位可以被操作,如果这些都需要同步的话,数据量是不能被接受的,所以帧同步不同步状态,只同步操作,每个客户端接受到操作以后,通过运算可以达到一致的状态(通过随机种子保证所有客户端随机序列一致),这样的情况下就算单位再多,他的同步量也不会随之增加。

总结一下:

1、对于回合制战斗来讲,其实选用哪种方式实现不是特别重要了,因为本身实现难度不是很高,采用状态同步也能实现离线战斗验证。所以采用帧同步的必要性不是很大。

2、对于单位比较多的RTS游戏一定是帧同步,对于COC来讲,他虽然是离线游戏,但是他在一样输入的情况下是能得到一样结果的,所以也可以认为他是用帧同步方式实现的战斗系统。

3、对于对操作要求比较高的,例如MOBA类游戏有碰撞(玩家、怪物可以互相卡位)、物理逻辑,纯物理类即时可玩休闲游戏,帧同步实现起来比较顺畅,(有开源的Dphysics 2D物理系统可用它是Determisti的)。

4、对于战斗时大地图MMORPG的,一个地图内会有成千上百的玩家,不是小房间性质的游戏,只能使用状态同步,只同步自己视野的状态。

5、帧同步有个缺点,不能避免玩家采用作弊工具开图。

开发大型mmo网络游戏该选帧同步还是状态同步

MMO网络游戏多采用状态同步方式。

状态同步机制包括服务器端基于帧率迭代游戏逻辑与服务器上部署游戏地图。服务器游戏逻辑基于帧率计算,帧率范围在15FPS至20FPS,以确保游戏手感和计算效率。采用固定帧率或FixedUpdate机制在帧率变化场景下提供更精准的迭代计算。服务器部署地图则需根据2D或3D地图特性,通过地图编辑器导出地图数据。

当玩家在地图上移动时,并不需要同步位置信息给客户端。客户端在接收到移动指令后,基于本地地图数据与寻路算法进行动画播放与路径导航。直到服务器更新玩家位置,客户端才同步玩家新位置。这一过程遵循状态变化后同步位置,再处理后续动作的原则,确保公平性与游戏体验。

阅读剩余
THE END