网络游戏同步原理荟萃

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

 

不知道大家是否碰到过这种情况,当某个玩家发出一个火球,这个火球有自己的运动轨迹,那么如何来判断火球是否打中了人呢?大部分情况,当策划提出这个要求的时候,一般会被程序否认,原因是:太麻烦了,呵呵。复杂点的还有包括两个火球相撞之类的事情发生。

那么网络游戏中,是否真的无法模拟实现这种模拟呢?

首先我们来看看模拟此种操作会带来什么样的麻烦:

1,服务器必须trace火球的运行轨迹,乍一想,挺慢的。

2,网络延迟,传过来有延迟,传过去有延迟,延迟还不稳定,麻烦。

3,都有两点解决不了了,接下来不愿意再想了。

呵呵,实际上呢,对火球的模拟比对人物运动的模拟要轻松很多,原因很简单,火球的方向不会变。下面来看看具体用什么样的结构来实现:

不知道大家是否还记得我去年这个时候提到过的Dead Reckoning算法,我们要模拟火球运动的关键就在于一个叫Moving Objects Tracing Server的服务器程序,这个服务器是干什么的呢。这个服务器接收主游戏服务器发过来的注册事件的信息,比如有个玩家,开始移动了,那么主游戏服务器就 把该玩家的运动PDU,包括方向,速度,加速度,起点发给MOTS (Moving Objects Tracing Server),然后MOTS自己开始对其运行进行模拟,当游戏服务器发来第二个PDU包的时候,则对各个物件的位置进行修正,并重新开始模拟。那么,我 们模拟的目的是什么呢?当然是发生某些事件,比如说碰撞,或者掉入地图的某个陷阱的时候,会将该事件回发给主逻辑服务器。然后逻辑服务器来处理该事件。

那么,对于火球的处理,也和处理其他玩家的同步一样,当接收到玩家的发火球的指令以后,产生一个火球,并指定其PDU信息,在MOTS上注册该个运 动物 体。当MOTS自行模拟到这个物体和其他玩家或者NPC物体产生碰撞,则通知主逻辑服务器,然后主逻辑服务器产生相应的动作。

那么关于延迟呢?有些人也许会说,比如说前面有个火球,我本地操纵的小人其实躲过去了,但是因为网络延迟,在服务器上我并没有躲过去,那么怎么算? 呵呵, 不知道大家玩过星际没有,有没有发现在星际中玩多人连线模式的时候,有一点最特别的地方,就是控制一个小兵的时候,点了地图上的某个位置,但是小兵并不会 马上开始移动,而是有一定的延迟,但是这一小点延迟并不能掩盖星际的经典,同样的理论用到这里也成立。对于客户端的控制,当玩家操纵的主角改变PDU信息 的时候,确保信息发送到服务器之后,再开始处理本地的操作指令,这样就能保证本地的预测和服务器的预测几乎是没有什么误差的,即使有很小的误差产生,以服 务器为主,这样玩家也不会有太大的抱怨。

————————————————————————————————————————-

网络游戏同步详解之一

同步在网络游戏中是非常重要的,它保证了每个玩家在屏幕上看到的东西大体是一样的。其实呢,解决同步问题的最简单的方法就是把每个玩家的动作都向其 他玩家广播一遍,这里其实就存在两个问题:1,向哪些玩家广播,广播哪些消息。2,如果网络延迟怎么办。事实上呢,第一个问题是个非常简单的问题,不过之 所以我提出这个问题来,是提醒大家在设计自己的消息结构的时候,需要把这个因素考虑进去。而对于第二个问题,则是一个挺麻烦的问题,大家可以来看这么个例 子:
比如有一个玩家A向服务器发了条指令,说我现在在P1点,要去P2点。指令发出的时间是T0,服务器收到指令的时间是T1,然后向周围的玩家广播这条 消息,消息的内容是“玩家A从P1到P2”有一个在A附近的玩家B,收到服务器的这则广播的消息的时间是T2,然后开始在客户端上画图,A从P1到P2 点。这个时候就存在一个不同步的问题,玩家A和玩家B的屏幕上显示的画面相差了T2-T1的时间。这个时候怎么办呢?

有个解决方案,我给它取名叫预测拉扯,虽然有些怪异了点,不过基本上大家也能从字面上来理解它的意思。要解决这个问题,首先要定义一个值叫:预 测误差。然后需要在服务器端每个玩家连接的类里面加一项属性,叫TimeModified,然后在玩家登陆的时候,对客户端的时间和服务器的时间进行比 较,得出来的差值保存在TimeModified里面。还是上面的那个例子,服务器广播消息的时候,就根据要广播对象的TimeModified,计算出 一个客户端的CurrentTime,然后在消息头里面包含这个CurrentTime,然后再进行广播。并且同时在玩家A的客户端本地建立一个队列,保 存该条消息,只到获得服务器验证就从未被验证的消息队列里面将该消息删除,如果验证失败,则会被拉扯回P1点。然后当玩家B收到了服务器发过来的消息“玩 家A从P1到P2”这个时候就检查消息里面服务器发出的时间和本地时间做比较,如果大于定义的预测误差,就算出在T2这个时间,玩家A的屏幕上走到的地点 P3,然后把玩家B屏幕上的玩家A直接拉扯到P3,再继续走下去,这样就能保证同步。更进一步,为了保证客户端运行起来更加smooth,我并不推荐直接 把玩家拉扯过去,而是算出P3偏后的一点P4,然后用(P4-P1)/T(P4-P3)来算出一个很快的速度S,然后让玩家A用速度S快速移动到P4,这 样的处理方法是比较合理的,这种解决方案的原形在国际上被称为(Full plesiochronous),当然,该原形被我篡改了很多来适应网络游戏的同步,所以而变成所谓的:预测拉扯。

另外一个解决方案,我给它取名叫验证同步,听名字也知道,大体的意思就是每条指令在经过 服务器验证通过了以后再执行动作。具体的思路如下:首先 也需要在每个玩家连接类型里面定义一个 TimeModified,然后在客户端响应玩家鼠标行走的同时,客户端并不会先行走动,而是发一条走路的指令给服务器,然后等待服务器的验证。服务器接 受到这条消息以后,进行逻辑层的验证,然后计算出需要广播的范围,包括玩家A在内,根据各个客户端不同的TimeModified生成不同的消息头,开始 广播,这个时候这个玩家的走路信息就是完全同步的了。这个方法的优点是能保证各个客户端之间绝对的同步,缺点是当网络延迟比较大的时候,玩家的客户端的行 为会变得比较不流畅,给玩家带来很不爽的感觉。该种解决方案的原形在国际上被称为(Hierarchical master-slave synchronization),80年代以后被广泛应用于网络的各个领域。

最后一种解决方案是一种理想化的解决方案,在国际上被称为Mutual synchronization,是一种对未来网络的前景的良好预测出来的解决方案。这里之所以要提这个方案,并不是说我们已经完全的实现了这种方案,而 只是在网络游戏领域的某些方面应用到这种方案的某些思想。我对该种方案取名为:半服务器同步。大体的设计思路如下:

首先客户端需要在登陆世界的时候建立很多张广播列表,这些列表在客户端后台和服务器要进行不及时同步,之所以要建立多张列表,是因为要广播的类 型是不止一种的,比如说有local message,有remote message,还有global message 等等,这些列表都需要在客户端登陆的时候根据服务器发过来的消息建立好。在建立列表的同时,还需要获得每个列表中广播对象的TimeModified,并 且要维护一张完整的用户状态列表在后台,也是不及时的和服务器进行同步,根据本地的用户状态表,可以做到一部分决策由客户端自己来决定,当客户端发送这部 分决策的时候,则直接将最终决策发送到各个广播列表里面的客户端,并对其时间进行校对,保证每个客户端在收到的消息的时间是和根据本地时间进行校对过的。 那么再采用预测拉扯中提到过的计算提前量,提高速度行走过去的方法,将会使同步变得非常的smooth。该方案的优点是不通过服务器,客户端自己之间进行 同步,大大的降低了由于网络延迟而带来的误差,并且由于大部分决策都可以由客户端来做,也大大的降低了服务器的资源。由此带来的弊端就是由于消息和决策权 都放在客户端本地,所以给外挂提供了很大的可乘之机。

综合以上三种关于网络同步派系的优缺点,综合出一套关于网络游戏传输同步的较完整的解决方案,我称它为综合同步法(colligate synchronization)。大体设计思路如下:

首先将服务器需要同步的所有消息从划分一个优先等级,然后按照3/4的比例划分出重要消息和非重要消息,对于非重要消息,把决策权放在客户端,在客户端逻辑上建立相关的决策机构和各种消息缓存区,以及相关的消息缓存区管理机构,如下图所示:

上图简单说明了对于非重要消息,客户端的大体处理流程,其中有一个客户端被动行为值得大家注意,其中包括对服务器发过来的某些验证代码做返回, 来确保消息缓存中的消息和服务器端是一致的,从而有效的防止外挂来篡改本地消息缓存。其中的消息来源是包括本地的客户端响应玩家的消息以及远程服务器传递 过来的消息。

对于重要消息,比如说战斗或者是某些牵扯到玩家一些比较敏感数据的操作,则采用另外一套方案,该方案首先需要在服务器和客户端之间建立一套 Ping System,然后服务器保存和用户的及时的ping值,当ping比较小的时候,响应玩家消息的同时先不进行动作,而是先把该消息反馈给服务器,并且阻 塞,服务器收到该消息,进行逻辑验证之后向所有该详细广播的有效对象进行广播(包括消息发起者),然后客户端收到该消息的验证,才开始执行动作。而当 ping比较大的时候,客户端响应玩家消息的同时立刻进行动作,并且同时把该消息反馈给服务器,值得注意的是这个时候还需要在本地建立一个无验证消息的队 列,把该消息入队,执行动作的同时等待服务器的验证,还需要保存当前状态。服务器收到客户端的请求后,进行逻辑验证,并把消息反馈到各个客户端,带上各个 客户端校对过的本地时间。如果验证通过不过,则通知消息发起者,该消息验证失败,然后客户端自动把已经在进行中的动作取消,恢复原来状态。如果验证通过, 则广播到的各个客户端根据从服务器获得校对时间进行对其进行拉扯,保证在该行为完成之前完成同步。

至此,一个比较成熟的网络游戏的同步机制已经初步建立起来了,接下来的逻辑代码就根据各自不同的游戏风格以及侧重点来写了。

同步是网络游戏最重要的问题,如何同步也牵扯到各个方面的问题,比如说游戏的规模,游戏的类型以及各种各样的方面,对于规模比较大的游戏,在同 步方面可以下很多的工夫,把消息分得十分的细腻,对于不同的消息采用不同的同步机制,而对于规模比较小的游戏,则可以采用大体上一样的同步机制,究竟怎么 样同步,没有个定式,是需要根据自己的不同情况来做出不同的同步决策的网游同步算法之导航推测(Dead Reckoning)算法:

——————————————————————————————————————————

网络游戏同步详解之二

在了解该算法前,我们先来谈谈该算法的一些背景资料。大家都知道,在网络传输的时候,延迟现象是很普遍的,而在基于Server/Client结构 下的网络游戏的同步也就成了很头疼的问题,在保证客户端响应用户本地指令流畅的情况下,没法有效的保证的同步的及时性。同样,在军方也有类似的事情发生, 即使是同一LAN里面的机器,也会因为传输的延迟,导致一些运算的失误,介于此,美国国防部投入了大量的资金用于研究一种比较的好的方案来解决分布式系统 中的延迟问题,特别是一个叫分布式模拟运动(Distributed Interactive Simulation)的系统,这套系统呢,其中就提出了一套号称是Latency Hiding & Bandwidth Reduction的方案,命名为Dead Reckoning。呵呵,来头很大吧,恩,那么我们下面就来看看这套系统的一些观点,以及我们如何把它运用到我们的网络游戏的同步中。

首先,这套同步方案是基于我那篇《网络游戏的同步》一文中的Mutual Synchronization同步方案的,也就是说,它并不是Server/Client结构的,而是基于客户端之间的同步的。下面我们先来说一些本文中将用到的名词概念:
网状网络:客户端之间构成的网络
节点:网状网络中的每个客户端
极限误差:进行同步的时候可能产生的误差的极值

恩,在探讨其原理的之前,我们先来看看我们需要一个什么样的环境。首先,需要一个网状网络,网状网络如何构成呢?当有新节点进入的时候,通知该 网络里面的所有节点,各节点为该客户端在本地创建一个副本,登出的时候,则通知所有节点销毁本地关于该节点的副本。然后每个节点该保存一些什么数据呢?首 先有一个很重要的包需要保存,叫做协议数据包(PDU Protocol Data Unit),PDU包含节点的一些相关的运动信息,比如当前位置,速度,运动方向,或者还有加速度等一些信息。除PDU之外,还有其他信息需要保存,比如 说节点客户端人物的HP,MP之类的。然后,保证每个节点在最少8秒之内要向其它节点广播一次PDU信息。最后,设置一个极限误差值。到此,其环境就算搭 建完成了。下面,我们就来看看相关的具体算法:

假设在节点A有一个小人(路人甲),开始跑路了,这个时候,就像所有的节点广播一次他的PDU信息,包括:速度(S),方向(O),加速度 (A)。那么所有的节点就开始模拟路人甲的运动轨迹和路线,包括节点A本身(这点很重要),同时,路人甲在某某玩家的控制下,会不时的改变一下方向,让其 跑路的路线变得不是那么正规。在跑路的过程中,节点A有一个值在不停的记录着其真实坐标和在后台模拟运动的坐标的差值,当差值大于极限误差的时候,则计算 出当前的速度S,方向O和速度A(算法将在后面介绍),并广播给网络中其他所有节点。其他节点在收到这条消息之后呢,就可以用一些很平滑的移动把路人甲拉 扯过去,然后重新调整模拟跑路的数据,让其继续在后台模拟跑路。

很显然,如果极限误差定义得大了,其他节点看到的偏差就会过大,如果极限偏差定义得小了,网络带宽就会增大。如果定义这个极限误差,就该根据各 种数据的重要性来设计了。如果是回合制的网络游戏,那么在走路上把极限误差定义得大些无所谓,可以减少带宽。但是如果是及时打斗的网络游戏,那么就得把极 限误差定义得小一些,否则会出现某人看到某人老远把自己给砍死的情况。

Dead Reckoning的主要算法有9种,但是只有两种是解决主要问题的,其他的基本上只是针对不同的坐标系的一些不同的算法,这里就不一一介绍了。好,那么我们下面来看传说中的最主要的两种算法:
第一:目标点 = 原点 + 速度 * 时间差
第二:目标点 = 原点 + 速度 * 时间差 + 1/2 * 加速度 * 时间差
呵呵,传说中的算法都是很经典的,虽然我们早在初中物理的时候就学过。

该算法的好处呢,正如它开始所说的,Latency Hiding & Bandwidth Reduction,从原则上解决了网络延迟导致的不同步的问题,并且有效的减少了带宽,不好的地方就是该算法基本上只能使用于移动中的同步,当然,移动 的同步是网络游戏中同步的最大的问题。

该方法结合我在《网络游戏的同步》一文中提出的综合同步法的构架可以基本上解决掉网络游戏中走路同步的问题。相关问题欢迎大家一起讨论。

有关导航推测算法(Dead Reckoning)中的平滑处理:

根据我上篇文章所介绍的,在节点A收到节点B新的PDU包时,如果和A本地的关于B的模拟运动的坐标不一致时,怎么样在A的屏幕上把B拽到新的 PDU包所描叙的点上面去呢,上文中只提了用“很平滑的移动”把B“拉扯”过去,那么实际中应该怎么操作呢?这里介绍四种方法。

第一种方法,我取名叫直接拉扯法,大家听名字也知道,就是直接把B硬生生的拽到新的PDU包所描叙的坐标上去,该方法的好处是:简单。坏处是:看了以下三种方法之后你就不会用这种方法了。

第二种方法,叫直线行走(Linear),即让B从它的当前坐标走直线到新的PDU包所描叙的坐标,行走速度用上文中所介绍的经典算法:
目标点 = 原点 + 速度 * 时间差 + 1/2 * 加速度 * 时间差算出:
首先算出从当前坐标到PDU包中描叙的坐标所需要的时间:
T = Dest( TargetB – OriginB ) / Speed
然后根据新PDU包中所描叙的坐标信息模拟计算出在时间T之后,按照新的PDU包中的运动信息所应该达到的位置:
_TargetB = NewPDU.Speed * T
然后根据当前模拟行动中的B和_TargetB的距离配合时间T算出一个修正过的速度_S:
_S = Dest( _TargetB – OriginB ) / T
然后在画面上让B以速度_S走直线到Target_B,并且在走到之后调整其速度,方向,加速度等信息为新的PDU包中所描叙的。

这种方法呢,非常的土,会让物体在画面上移动起来变得非常的不现实,经常会出现很生硬的拐角,而且对于经常要修改的速度_S,在玩家A的画面上,玩家B的行动会变得非常的诡异。其好处是:比第一种方法要好。

第三种方法,叫二次方程行走(Quadratic),该方法的原理呢,就是在直线行走的过程中,加入二次方程来计算一条曲线路径,让Dest( _TargetB – OriginB )的过程是一条曲线,而不是一条直线,恩,具体的实现方法,就是在Linear方法的计算中,设定一个二次方程,在Dest函数计算距离的时候根据设定的 二次方程来计算,这样一来,可以使B在玩家A屏幕上的移动变得比较的有人性化一些。但是该方法的考虑也是不周全的,仅仅只考虑了TargetB到 _TargetB的方向,而没有考虑新的PDU包中的方向描叙,那么从_TargetB开始模拟行走的时候,仍然是会出现比较生硬的拐角,那么下面提出的 最终解决方案,将彻底解决这个问题。

——————————————————————————————————————————

网络游戏同步详解之三

最后一种方法叫:立方体抖动(Cubic Splines),这个东东比较复杂,它需要四个坐标信息作为它的参数来进行运算,第一个参数Pos1是OriginB,第二个参数Pos2是 OriginB在模拟运行一秒以后的位置,第三个参数Pos3是到达_TargetB前一秒的位置,第四个参数pos4是_TargetB的位置。

Struct pos {
Coordinate X;
Coordinate Y;
}
Pos1 = OriginB
Pos2 = OriginB + V
Pos3 = _TargetB – V
Pos4 = _TargetB
运动轨迹中(x, y)的坐标。
x = At^3 + Bt^2 + Ct + D
y = Et^3 + Ft^2 + Gt + H
(其中时间t的取值范围为0-1,在Pos1的时候为0,在Pos4的时候为1)
x(0-3)代表Pos1-Pos4中x的值,y(0-3)代表Pos1-Pos4中y的值
A = x3 – 3 * x2 +3 * x1 – x0
B = 3 * x2 – 6 * x1 + 3 * x0
C = 3 * x1 – 3 * x0
D = x0
E = y3 – 3 * y2 +3 * y1 – y0
F = 3 * y2 – 6 * y1 + 3 * y0
G = 3 * y1 – 3 * y0
H = y0

上面是公式,那么下面我们来看看如何获得Pos1-Pos4:首先,Pos1和 Pos2的取值会比较容易获得,根据OriginB配合当前的速度和方向可以获得,然而Pos3和Pos4呢,怎么获得呢?如果在从Pos1到Pos4的 过程中有新的PDU到达,那么我们定义它为NewPackage。

Pos3 = NewPackage.X + NewPackage.Y * t + 1/2 * NewPackage.a * t^2
Pos4 = Pos3 – (NewPackage.V + NewPackage.a * t)

如果没有NewPackage的情况下,则Pos3和Pos4按照开始所规定的方法获得。

至此,关于导航推测的算法大致介绍完毕。

原文来自:http://xinsync.xju.edu.cn/index.php/archives/4079

网络游戏同步技术四:方案选择 本文介绍什么游戏应该使用什么网络同步技术。帧同步与状态同步的区别,可以这么打比方:帧同步是所有客户端播放同一部电影,视觉上完全一样;状态同步是所有客户端拿着相同的剧本(状态一样),但是电影画面略有差异。而快照同步,由于所有的仿真都发生在服务器,所以各个客户端视觉上是一致的,也是在播放同一部电影。弱客户端,像小游戏,云游戏,都可以使用快照同步。 阅读详情

相关推荐

易语言游戏后台同步按键源码

易语言游戏后台同步按键源码 源码哦 原创 要的拿走吧,机会不都哦

游戏测试——沟通与信息同步

游戏开发中,经常需要与各部门同步bug复现与跟进、功能整体情况、问题复盘等问题,罗列了一些沟通中需要注意同步的事项和时间节点,作为新生测试员的参考。

weixin_41572872的博客 623

网络游戏知识——【同步算法

同步是网络游戏的一大难题,不同类型的游戏对同步有着不同程度的要求,如何解决好同步产生的问题?同步方案(帧同步,状态同步,状态帧同步)的区别和联系?网络传输协议(TCP,UDP,可靠UDP)的区别和联系?下面就让我们一起来学习下吧。

qq_53045580的博客 1932

子弹与数据的赛跑:FPS游戏网络同步全方位优化实战

FPS网络同步优化,是工程师和玩家一起“打怪升级”的旅程。每一个丢包,都有工程师夜晚查Bug,调试代码。每一次枪声准星背后,是网络算法、代码细节、作弊防范等多重黑科技的较量。只有深耕底层、不断创新,才能带来下一代FPS游戏的酣畅淋漓体验。

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 2616

游戏网络同步算法

大体的思路是利用玩家角色的SOI(Spheres of Influence,和AOI概念差不多),两个玩家如果相距很远互不影响,就采用本地时钟向前推进(非Lockstep方式同步),如果互相靠近并可能影响到对方就变回到严格的LockStep同步,这里并不保证他们的帧序列是完全一致的。有可能socket发出去的一个包给客户端,客户端会接收到2个不同的帧,合并在一起,有可能因为网络缘故去把帧接收慢了,表现上有误,那都是客户端的优化了。作用于网络,防止过多的数据注入网络,避免网络过载拥塞控制。

CherryBlossom_的博客 590

Unity3D 多人网络游戏-客户端于服务器的同步

游戏运行效果:客户端和服务器端的同步(运行稍有延迟现象) 游戏场景自行建立,只需要能体现出来即可,如一个地面一个预设物体即可   1.      启用Unity3D新建一项目,在场景中新建两个空的GameObject对象,并分别命名为Connect和RobotControl,如图所示,Connect对象负责客户端与服务器端的脚本逻辑.在该场景中服务器也参与游戏的运行.RobotContr

shuaishuai721的专栏 1万+

STM32 ADC从入门到精通:原理、配置与实战优化指南

模数转换器(ADC)是嵌入式系统中连接模拟世界与数字世界的核心接口,其作用是将连续的模拟信号(如电压)转换为离散的数字量,供微控制器处理。ADC的工作原理基于采样、保持和量化,其关键参数包括分辨率、采样率和参考电压,直接影响测量精度与系统性能。在嵌入式开发中,ADC的技术价值在于实现对温度、压力、光照等各类传感器信号的精确采集,是物联网、工业控制、智能设备等应用场景的基石。本文以STM32的ADC模块为例,深入解析其工作模式与配置要点,并针对实际开发中常见的读数跳变、精度不足等问题,提供从软件滤波、硬件抗干

weixin_33966095的博客 312

游戏服务器领域的 “状态同步”、“非状态同步”

游戏客户端把来自玩家的操作行为上传到服务器游戏服务器按一秒划分为若干个的逻辑帧进行处理,而游戏客户端更趋向于行为预测,不需要等待服务器下发快照数据就可以提前执行玩家的操作,等游戏服务器下发快照数据以后,游戏客户端在验证行为的正确性,如果行为不正确就会进行回滚操作,所以此类同步方法设计的网络游戏,有些时候或许能看到玩家移动了一段距离后被拉回源点的情况。状态同步服务器指,当游戏客户端(玩家)发生了任何行为就立即向游戏服务器发送消息同步状态,服务器处理状态后向场景内其它玩家进行该玩家的状态同步。

liulilittle的博客 3205

浅谈RTS游戏网络同步:3种同步机制模式的实现

RTS游戏有很多,可能大家比较熟悉的有Warcraft III (dota)和 StarCraft,早期西木的沙丘,红色警戒更是rts游戏的鼻祖,带给我们无限的欢乐和回忆。还有当下比较流行lol与dota2,实际上都是孙子辈的游戏了。RTS游戏同步很重要,而且同步也能非常稳定地实现。的那么他们到底是怎么做到高频操作又同步的呢?同步机制假设游戏中A,B两个玩家移动,并同时向对方发出射击指令,如果没有合适的同步机制,那么可能出现的情况有: A屏幕显示B已经被杀死,B屏幕显示A已经被杀死 或者在瞄准后确打.

wubaohu1314的博客 1888

每个程序员都需要知道一些游戏网络知识

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34111819的博客 447

淦!那些程序员必备的知识技能:游戏网络知识

这是一篇翻译文章,主要针对游戏网络设计,目前主流的网络游戏实现方案都有讲解。文章来源于网络。 作为一个程序员,你有没有想象过多人游戏是如何实现的? 在外行人看来游戏很神奇:两个或者更多的玩家在网络上分享共同的经历,就像他们真实的存在于相同的虚拟的世界一样。游戏看起来犹如一个巨大的魔术,奇妙而又刺激,但作为一个开发人员我们知道,真实的情况和我们所看到的并不一样,那只是一种错觉。你感受到的共享现实,实际上是在那个时刻内,由你自己的独特视角和位置所感知的近似情况。 Peer-to-Peer 帧同步.

Python6886的博客 355

网络游戏数据同步的实现 一:状态同步、帧同步的基本原理概述

网络游戏,最重要的部分应该就是数据同步了。一个游戏的数据同步质量,直接影响这个网游的操作体验。做出一个一步一卡的游戏,一定会成为其最大的槽点。 记得我当年最早玩的网络游戏《传奇》,那真是处处可卡bug满天飞,,,即使是这样,大家仿佛觉得这卡顿是天经地义的,面不改色的接受这种摧残。。。 除了服务端的硬件投入以外,数据同步方式的不同也直接会影响性能。 拿时下比较火爆的几个网游为例,数据同步方式大致分为以下几种: 操作同步。 信息同步。 3。 3 ...

失业求捞! 1万+

游戏数据同步方案

首先我们介绍实时对战手游中最难解决的技术问题——弱网络下的数据同步问题 通过对玩家的游戏数据进行观察,发现玩家的游戏环境存在很大差异,不同玩家会使用不同的2G/3G/4G/Wifi网络,不同网络之间的延迟相差很大。另外移动网络质量不稳定,且都是按流量收费,这些都是需要考虑的问题。手机在网络间的切换,又会造成底层网络断线、地址变化等问题,都是常见的情况。这些问题的统一解决手段,最重要的是通盘考虑各种需求,选择一个合理的游戏状态同步模型。 腾讯在大量游戏开发的实践中,总结出三种游戏的同步模型: 第一种叫MMOG

qq_26726107的博客 1212

网络游戏网络同步方案的选择

随着电子竞技的快速发展和移动互联网的迅速崛起,手游的市场份额月来越高,不但各种原创的手游被开发者开发出来,甚至许多流行的端游也被开发者移植到手机上来,如今手游的类型多种多样,从单机到rpg,slg策略游戏,卡牌游戏弱交互游戏,以及rts,mmorpg,moba等重型多人在线游戏,其网络同步方案各有各的特点,到底如何选择游戏的同步方案呢?我们先来介绍一下常见的同步方案。 一.p2p模式 ...

D_Guco的专栏 1万+

聊聊多人游戏同步那点事:基本同步模型方案分享

https://www.fgba.net/sitemap.xml

woliuqiangdong的博客 1016

游戏几种同步策略

http://www.gameres.com/478430.html  GameRes游资网授权发布 文 / 韦易笑  实时动作游戏在近年来得到迅猛的发展。而游戏同步问题,成为大家继续解决的核心问题之一。早在 2004年,国内游戏开发还处于慢节奏 RPG满天飞的情况下,我就开始实时动作游戏研究。分别在 2005-2006期间写了一系列相关文章,被好多网站转载:  帧间同步模式:《帧锁定同步算法》(...

清风亦枫的博客 7855

再谈网游同步技术:实时动作游戏同步方式和传输协议选择

http://www.gameres.com/478430.html 6 天前 上传 下载附件 (88.33 KB)   GameRes游资网授权发布 文 / 韦易笑   实时动作游戏在近年来得到迅猛的发展。而游戏同步问题,成为大家继续解决的核心问题之一。早在 2004年,国内游戏开发还处于慢节奏 RPG满天飞的情况下,我就开始实时动作游

茶向 8286
上一篇: 新的起点,新的开始,加油
下一篇: 基于c/s非标准控件的自动化尝试和testcomplete介绍
zhsp1029
博客等级 码龄20年 115粉丝 89原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值