精华内容
下载资源
问答
  • 帧同步,帧同步是什么意思

    千次阅读 2019-04-08 12:57:45
    帧同步,帧同步是什么意思 在数字通信时,一般总是以一定数目的码元组成一个个的“字”或“句”,即组成一个个的“群”进行传输的。因此,群同步信号的频率很容易由位同步信号经分频而得出。但是,每个群的开头和末尾...

    帧同步,帧同步是什么意思
    在数字通信时,一般总是以一定数目的码元组成一个个的“字”或“句”,即组成一个个的“群”进行传输的。因此,群同步信号的频率很容易由位同步信号经分频而得出。但是,每个群的开头和末尾时刻却无法由分频器的输出决定。群同步的任务就是在位同步信息的基础上,识别出数字信息群(“字”或“句”)的起止时刻,或者说给出每个群的“开头”和“末尾”时刻。
    群同步有时也称为帧同步。为了实现群同步,可以在数字信息流中插入一些特殊码字作为每个群的头尾标记,这些特殊的码字应该在信息码元序列中不会出现,或者是偶然可能出现,但不会重复出现,此时只要将这个特殊码字连发几次,收端就能识别出来,接收端根据这些特殊码字的位置就可以实现群同步。本节将主要讲述插入特殊码字实现群同步的方法。
    插入特殊码字实现群同步的方法有两种,即连贯式插入法和间隔式插入法。在介绍这两种方法以前,先简单介绍一种在电传机中广泛使用的起止式群同步法。
    起止同步法
    目前在电传机中广泛使用的同步方法,就是起止式群同步法,下面就以电传机为例,简要地介绍一下这种群同步方法的工作原理。
    电传报文的一个字由7.5个码元组成,假设电传报文传送的数字序列为10010,则其码元结构如图1所示。从图中可以看到,在每个字开头,先发一个码元的起脉冲(负值),中间5个码元是信息,字的末尾是1.5码元宽度的止脉冲(正值),收端根据正电平第一次转到负电平这一特殊规律,确定一个字的起始位置,因而就实现了群同步。由于这种同步方式中的止脉冲宽度与码元宽度不一致,就会给同步数字传输带来不便。另外,在这种同步方式中,7.5个码元中只有5个码元用于传递信息,因此编码效率较低。但起止同步的优点是结构简单,易于实现,它特别适合于异步低速数字传输方式。

    连贯式插入法
    连贯式插入法就是在每群的开头集中插入群同步码字的同步方法。作群同步码字用的特殊码字首先应该具有尖锐单峰特性的局部自相关特性,其次这个特殊码字在信息码元序列中不易出现以便识别,最后群同步识别器需要尽量简单。目前已经找到的最常用的群同步码字,就是“巴克”码。
    1.巴克码
    巴克码是一种具有特殊规律的二进制码字。它的特殊规律是:若一个n位的巴克码{X1,X2,X3,…Xn},每个码元 只可能取值+1或-1,则它必然满足条件
    式(1)中,R(j)称为局部自相关函数。从巴克码计算的局部自相关函数可以看到,它满足作为群同步码字的第一条特性,也就是说巴克码的局部自相关函数具有尖锐单峰特性,从后面的分析同样可以看出,它的识别器结构非常简单。目前人们已找到了多个巴克码字,具体情况如表1所示。表中+表示+1,–表示–1。
    以n = 7的巴克码为例,它的局部自相关函数计算结果如下

    同样可以求出j = 3、4、5、6、7,以及j = -1、-2、-3、-4、-5、-6、-7时R(j)的值为

    根据式(2)计算出来的这些值,可以作出7位巴克码关于R(j)与j的关系曲线,如图2。由图2可以看出,自相关函数在j=0时具有尖锐的单峰特性。局部自相关函数具有尖锐的单峰特性正是连贯式插入群同步码字的主要要求之一。

    2.巴克码识别器
    巴克码识别器是比较容易实现的,这里以七位巴克码为例,用7级移位寄存器、相加器和判决器就可以组成一识别器,具体结构如图7-16所示。7级移位寄存器的1、0端输出按照1110010的顺序连接到相加器输入,接法与巴克码的规律一致。当输入数据的“1”存入移位寄存器时,“1”端的输出电平为+1,而“0”端的输出电平为-1;反之,存入数据“0”时,“0”端的输出电平为+1,“1”端的电平为-1。
    当发送端送来的码元自右向左进入时,首先考虑一个简单的情况:假设只计算巴克码(1110010)进入的几个移位寄存器的输出,此时将有巴克码进入一位,二位……七位全部进入,第一位移出尚留六位……前六位移出只留一位等13种情况。经过计算可得相加器的输出就是自相关函数,设码元进入移位寄存器数目为a,码元尚留在移位寄存器的数目是b,这是就可以得到a、b和j之间的关系式

    根据上述关系可以得到表2,它反映了相加器输出与a、b之间的关系。

    实际上述群同步码的前后都是有信息码的,具体情况如图4(a)所示,在这种情况下巴克码识别器的输出波形如图4(b)所示。

    当七位巴克码在图4中的t1时刻,正好已全部进入了7级移位寄存器,这时7个移位寄存器输出端都输出+1,相加后得最大输出+7,如图4(b)所示,而判决器输出的两个脉冲之间的数据,称为一群数据或称为一帧数据。
    当然,对于信息而言,由于其具有的随机特性,可以考察一种最不利的情况:即当巴克码只有部分码在移位寄存器时,信息码占有的其它移位寄存器的输出全部是+1,在这样一种对于群同步最不利的情况下,相加器的输出将如表3所示。由此可得到相加器的输出波形如图5所示。图中横坐标用a表示,由a、b和j之间的关系可知,a=14-b。

    由图5可以看出,如果判决电平选择为6,就可以根据a=7时相加器输出的7,大于判决电平6而判定巴克码全部进入移位寄存器的位置。此时识别器输出一个群同步脉冲,表示群的开头。一般情况下,信息码不会正好都使移位寄存器的输出均为+1,因此实际上更容易判定巴克码全部进入移位寄存器的位置。后面还要讲到如果巴克码中有误码时,只要错一个码,当a=7时相加器输出将由7变为5,低于判决器的判决电平。因此,为了提高群同步的抗干扰性能,防止漏同步,判决电平可以改为4。但改为4以后容易发生假同步,这些问题在性能分析时要进一步讨论。
    间歇式插入法
    在某些情况下,群同步码字不再是集中插入在信息码流中,而是将它分散地插入,即每隔一定数量的信息码元,插入一个群同步码字。这种群同步码字的插入方式被称为间歇式插入法。
    当然集中式插入法和间歇式插入法在实际系统当中都有应用,例如在32路数字电话PCM系统中,实际上只有30路通电话,另外两路中的一路专门作为群同步码传输,而另一路作为其它标志信号用,这就是连贯式插入法的一个应用实例。而在24路PCM系统中,群同步则采用间歇式插入法。在这个系统中,一个抽样值用8位码表示,此时24路电话都抽样一次共有24个抽样值,192(24×8=192)个信息码元。192个信息码元作为一帧,在这一帧插入一个群同步码元,这样一帧共193个码元。24路PCM系统如图7-19所示:
    由于间歇式插入法,是将群同步码元分散的插入倒信息流中,因此,群同步码码型选择有一定的要求,其主要原则是:首先要便于收端识别,即要求群同步码具有特定的规律性,这种码型可以是全“1”码、“1”“0”交替码等;其次,要使群同步码的码型尽量和信息码相区别。例如在某些PCM多路数字电话系统中,用全“0”码代表“振铃”,用全“1”码代表“不振铃”,这时,为了使群同步码字与振铃相区别,群同步码就不能使用全“1”或全“0”。
    收端要确定群同步码的位置,就必须对接收的码进行搜索检测。一种常用检测方法为逐码移位法,它是一种串行的检测方法;另一种方法是RAM帧码检测法,它是利用RAM构成帧码提取电路的一种并行检测方法。这里将介绍逐码移位法的基本原理和实现同步的过程。

    逐码移位法的基本原理就是,由位同步脉冲(位同步码)经过n次分频以后的本地群码(频率是正确的,但相位不确定)与接收到码元中间歇式插入的群同步码进行远码移位比较,使本地群码与发送来的群同步码同步。其原理结构框图如图7:

    图7中异或门、延迟一位电路和禁门是专门用来扣除位同步码元以调整本地群码相位的,具体过程可以通过图8看到。
    设接收信码(波形c)中的群同步码位于画斜线码元的位置,后面依次安排各路信息码1、2、3(为简单起见,只包含三路信息码)。如果系统已经实现了群同步,则位同步码(波形a)经四次分频后,就可以使得本地群码的相位与收信码中的群同步码的相位一致。现在假设开始时如波形d图所示,本地群码的位置与波形c收信码中的群码位置相差两个码元位。为了易于看出逐码移位法的工作过程,假设群码为全“1”码,其余的信息码均与群码不同,为“0”。在第一码元时间,波形c与d不一致,原理图中的异或门有输出(波形e),经延迟一码元后,得波形f加于禁门,扣掉位同步码的第2个码元(波形b的第2个码元位置用加一叉号表示),这样分频器的状态在第2码元期间没有变化,因而分频器本地群码的输出仍保持和第1码元时相同。这时,它的位置只与收信码中的群码位置相差一位了(见波形d1)。

    类似地在第2码元时间,c又和d1进行比较,产生码形e1和f1,又在第3码元位置上扣掉一个位同步码,使本地群码的位置又往后移一位(波形d2)。至此以后,收信码中的群码与本地群码的位置就完全一致了,因而就实现了群同步。同时,也就提供了各路的定时信号。
    从图8表示的群同步建立原理来看,如果信息码中所有的码都与群码不同,那么最多只要连续经过N次调整,经过NTb的时间就可以建立同步了。但实际上信息码中“l”、“0”码均会出现,当出现“1”码时,在上面群同步过程的例子中,第1个位同步码对应的时间内信息码为“1”,图7-21中异或门输出 e=0,f=0禁门不起作用,不扣除第2位同步码,因此本地群码不会向右移展宽,这一帧调整不起作用,一直要到下一帧才有可能调整。假如下一帧本地群码d还是与信码中“1”码相对应,则调整又不起作用。当信息码中1、0码等概出现时,即P(1)=P(0)=0.5时,经过计算,群同步平均建立的时间近似为 (5)
    群同步系统的性能指标
    对于群同步系统而言,希望其建立的时间要短、建立同步以后应该具有较强的抗干扰能力。因此,在通常情况下,用以下三个性能指标来表示群同步性能的好坏,它们是:(1)漏同步概率P1;(2)假同步概率P2;(3)群同步平均建立时间ts。
    不同形式的同步系统,性能自然也不同。在此将主要分析集中插入方式的群同步系统的性能。
    1.漏同步概率P1
    由于噪声和干扰的影响,会引起群同步码字中一些码元发生错误,从而使识别器漏识别已发出的群同步码字,出现这种情况的概率称为漏识概率,用符号 来表示。以7位巴克码识别器为例,设判决门限为6,此时7位巴克码中只要有一位码发生错误,当7位巴克码全部进入识别器时,相加器输出就由7变5,小于判决门限6,这时就出现了漏同步情况,因此,只有一位码也不错才不会发生漏同步。若在这种情况下,将判决门限电平降为4,识别器就不会漏识别,这时判决器容许7位同步码字中有一个错误码元。
    在信息码中也可能出现与所要识别的群同步码字相同的码字,这时识别器会把它误认为群同步码字而出现假同步。出现这种情况的概率就被称为假同步概率,用符号P2表示。
    因此,计算假同步概率P2计算信息码元中能被判为同步码字的组合数与所有可能的码字数之比。设二进制信息码中1和0码等概出现,也就是P(1)=P(0)=0.5,则由该二进制码元组成n位码字的所有可能的码字数为2n个,而其中能被判为同步码字的组合数也与m有关,这里m表示判决器容许群同步码字中最大错码数,若m=0时,只有 个码字能识别;若M=1,则有 个码字能识别。以此类推,就可求出信息码元中可以被判为同步码字的组合数,这个数可以表示为 ,由此可得假同步概率的表达式为

    从式(6)和式(7)可以看到,随着m的增大,也就是随着判决门限电平降低,P1减小,但P2将增大,所以这两项指标是相互矛盾的。所以,判决门限的选取要兼顾漏同步概率和假同步概率。
    3.群同步平均建立时间ts
    对于连贯式插入的群同步而言,设漏同步和假同步都不发生,也就是P1 = 0和P2 = 0。在最不利的情况下,实现群同步最多需要一群的时间。设每群的码元数为N(其中m位为群同步码),每码元时间为Tb,则一群码的时间为NTb。考虑到出现一次漏同步或一次假同步大致要多花费 的时间才能建立起群同步,故群同步的平均建立时间大致为:

    群同步的保护
    1.连贯式插入法中的群同步保护
    连贯式插入法中的群同步保护电路如图9。在群同步尚末建立时,系统处于捕捉态,状态触发器C的Q端为低电平,群同步码字识别器的判决门限电平较高,因而就减小了假同步概率P2。这时在保护电路中,由于把判决门限电平调高,假同步的概率已很小,故保护电路中的n分频器被置零,禁止位同步n分频后输出。这里的n表示一帧数据的长度,因此,在置零信号无效时,位同步n分频后可以输出一个与群同步同频的信号,但脉冲位置不能保证与群同步脉冲位置相同,而这个脉冲位置也正是需要捕捉态确定的。

    从图9可以看到,为了减小假同步的概率,必须连续 次接收的码元与本地群码相一致,才被认为是建立了同步,采用这种方法可使假同步的概率大大减小。
    状态触发器C在同步末建立时处于“捕捉态”(此时Q端为低电平)。本地群码和收码只有连续n1次一致时,n1计数电路才输出一个脉冲使状态触发器的Q端由低电平变为高电平,群同步系统就由捕捉态转为维持态,表示同步已经建立。这样收码就可通过与门1加至解调器。偶然的一致是不会使状态触发器改变状态的,因为 次中只要有一次不一致,就会使计数电路置“0”。
    同步建立以后,可以利用状态触发器C和n2计数电路,来防止漏同步以提高同步系统的抗干扰能力。一旦转为维持状态以后,触发器C的Q反端变为低电乎,将与门2封闭。这时即使由于某些干扰使e有输出,也不会调整本地群码的相位。如果是真正的失步,e就会不断地将输出加到n2计数电路,同时e的反也不断将 计数电路置“0”。这时n1计数电路也不会再有输出加到n2计数电路的置“0”端上,而当n2计数电路输入脉冲的累计数达到n2时,就输出一个脉冲使状态触发器由维持态转为捕捉态,C触发器的Q反端转为高电平。这样,一方面与门2打开,群同步系统又重新进行逐码移位,另一方面封闭与门1,使解调器暂停工作。由此可以看出,将逐码移位法群同步系统划分为捕捉态和维持态后,既提高了同步系统的可靠性,又增加了系统的抗干扰能力。

    展开全文
  • 帧同步方法

    千次阅读 2012-07-25 10:29:54
    帧同步方法一般有以下几种: 1、字节计数法。 2、使用字符填充的首尾定界符法。 3、使用比特填充的首尾标志法。 4、违例编码法。  违例编码法在物理层采用特定的比特编码方法时采用。比如说,用曼彻斯特编码...

    (来源于网络)

    帧同步的方法一般有以下几种:

    1、字节计数法。

    2、使用字符填充的首尾定界符法。

    3、使用比特填充的首尾标志法。

    4、违例编码法。

        违例编码法在物理层采用特定的比特编码方法时采用。比如说,用曼彻斯特编码方法时,将数据比特1编码成高——低电平对,而将数据比特0编码成低——高电平对。高——高或低——低电平对在数据比特的编码中都是违例的,可以借用这些违例的编码序列来定界帧的开始和结束。

    5、其他

    展开全文
  • 帧同步

    千次阅读 2018-03-13 09:44:25
    帧同步什么是帧同步帧同步常被RTS(即时战略)游戏常采用。在游戏中同步的是玩家的操作指令,操作指令包含当前的帧索引。一般的流程是客户端上传操作到服务器, 服务器收到后并不计算游戏行为, 而是转发到所有...

    帧同步

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

    实现帧同步的流程一般是:

    1. 同步随机数种子。(一般游戏中都设计随机数的使用, 通过同步随机数种子,可以保持随机数一致性)

    2. 客户端上传操作指令。(指令包括游戏操作和当前帧索引)

    3. 服务器广播所有客户端的操作。(如果没有操作, 也要广播空指令来驱动游戏帧前进)。

    因为帧同步的特性, 我们可以很方便的做出战斗回放:服务器记录所有操作, 客户端请求到操作文件再执行一次即可。

    帧同步的特性导致客户端的逻辑实现和表现实现必须完全分离。Unity中的一些方法接口(如 Invoke, Update、动画系统等)是不可靠的,所有要自己实现一套物理引擎、数学库,做到逻辑和表现分离。 这样即使Unity的渲染是不同步的,但是逻辑跑出来是同步的。

    我曾经参与过一个飞机类弹幕游戏的项目,它的同步方案就是帧同步, 可以完美的播放回放, 并实现服务器上加速验算。


    状态同步

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

    状态同步其实是一种不严谨的同步。它的思想中,不同玩家屏幕上的表现的一致性并不是重要指标, 只要每次操作的结果相同即可。所以状态同步对网络延迟的要求并不高。像玩RPG游戏,200-300ms的延迟也可以接受。 但是在RTS游戏中,50ms的延迟也会很受伤。 举个移动的例子,在状态同步中, 客户端甲上操作要求从A点移动到B点,但在客户端乙上, 甲对象从A移动到C,然后从C点移动到了B。这是因为, 客户端乙收到A的移动状态时, 已经经过了一个延迟。这个过程中,需要客户端乙本地做一些平滑的处理,最终达到移动到B点的结果。

    所以国产RPG游戏中,动画的特效一般做的比较绚丽(大), 攻击的时候给人感觉是击中了。放技能之前一般也有一个动画前摇,同时将攻击请求提交给服务器。等服务器结果返回时,动画也播放完毕了,之后就是统一的伤害效果和结算。


    状态同步帧同步
    流量相对高相对低
    回放记录文件大记录文件小
    安全性服务器实现逻辑,安全性高逻辑在客户端,反外挂压力大、无法避免开图挂
    服务器压力
    战斗校验协议加密,内存混肴,误差校验,无法彻底解决。服务器可以重启跑一遍战斗。
    网络卡顿的表现瞬移,回位,莫名掉血战斗卡顿
    实现调优状态同步方式,客户端需要做插值处理。客户端按照单机方式开发,保证逻辑层和表现层分离。逻辑层不要用到浮点数,不要用不确定顺序的逻辑结构。对于物理引擎和浮点数计算要不能使用Unity的。
    展开全文
  • 帧同步总结

    千次阅读 2019-04-19 14:55:45
    1.为了方便处理,所有的逻辑都是等服务器返回后执行,暂时不做预测等处理。 客户端的每次操作不会立即生效,而是...锁定同步(Lock step sync) 1.客户端定时(比如50毫秒)上传操作控制信息,大家都流畅的...

    1.为了方便处理,所有的逻辑帧都是等服务器返回后执行,暂时不做预测等处理。

    客户端的每次操作不会立即生效,而是上传给服务器,客户端执行操作的时间都收到服务器发送的为准,服务器保证的是所有客户端都以同一帧执行该操作。

    2.逻辑帧和渲染帧分离,像王者荣耀逻辑帧15帧,渲染帧30帧或者60帧

    帧锁定同步(Lock step sync)

    1.客户端定时(比如50毫秒)上传操作控制信息,大家都流畅的话,服务器也是同频广播

    2.一旦有其他客户端卡顿,则会导致,服务器没法在一个点采集到全部的客户端信息,导致一直等待,这间接导致了客户端收不到服务器的下一个关键帧而等待,直到收到消息为止

     

    乐观帧同步(frame sync)参考韦一笑写的

    针对传统严格帧锁定算法中网速慢会卡到网速快的问题,实践中线上动作游戏通常用“定时不等待”的乐观方式再每次Interval时钟发生时固定将操作广播给所有用户,不依赖具体每个玩家是否有操作更新:

    1. 单个用户当前键盘上下左右攻击跳跃是否按下用一个32位整数描述,服务端描述一局游戏中最多8玩家的键盘操作为:int player_keyboards[8];

    2. 服务端每秒钟20-50次向所有客户端发送更新消息(包含所有客户端的操作和递增的帧号):

    update=(FrameID,player_keyboards)

    3. 客户端就像播放游戏录像一样不停的播放这些包含每帧所有玩家操作的 update消息。

    4. 客户端如果没有update数据了,就必须等待(),直到有新的数据到来。

    5. 客户端如果一下子收到很多连续的update,则快进播放。

    6. 客户端只有按键按下或者放开,就会发送消息给服务端(而不是到每帧开始才采集键盘),消息只包含一个整数。服务端收到以后,改写player_keyboards

    虽然网速慢的玩家网络一卡,可能就被网速快的玩家给秒了(其他游戏也差不多)。但是网速慢的玩家不会卡到快的玩家,只会感觉自己操作延迟而已。另一个侧面来说,土豪的网宿一般比较快,我们要照顾。

    随机数需要服务端提前将种子发给各个客户端,各个客户端算逻辑时用该种子生成随机数,另外该例子以键盘操作为例,实际可以以更高级的操作为例,比如“正走向A点”,“正在攻击”等。该方法目前也成功的被应用到了若干实时动作游戏中。

     

    指令缓存

    针对高级别的抽象指令(非前后可以覆盖的键盘操作),比如即时战略游戏中,各种高级操作指令,在“乐观帧锁定”中,客户端任何操作都是可靠消息发送到服务端,服务端缓存在对应玩家的指令队列里面,然后定时向所有人广播所有队列里面的历史操作,广播完成后清空队列,等待新的指令上传。客户端收到后按顺序执行这些指令,为了保证公平性,客户端可以先执轮询行每个用户的第一条指令,执行完以后弹出队列,再进入下一轮,直到没有任何指令服务器下发之前,可以对指令队列做排序,按序执行。这样在即时战略游戏中,选择 250ms一个同步帧,每秒四次,已经足够了。如果做的好还可以象 AOE一样根据网速调整,比如网速快的时候,进化为每秒10帧,网速慢时退化成每秒4帧,2帧之类的。

    空帧也要广播

    房间帧同步相关协议

    //cmd=11126|广播帧
    message BroadcastFrame_S2C_Msg{
      required int64 frame=1;
      repeated RoleCommandDTO roleCommandDTO=2;
    }
    
    //cmd=200001|申请匹配
    message ApplyMatch_C2S_Msg{
    }
    
    //cmd=200001|申请匹配
    message ApplyMatch_S2C_Msg{
      required Code code = 1;
    }
    
    //cmd=200002|广播匹配结果
    message BroadcastMatchResult_S2C_Msg{
      required int64 roomId=1;
    }
    
    //cmd=200003|进入房间
    message EnterRoom_C2S_Msg{
      required int64 roomId=1;
    }
    
    //cmd=200003|进入房间
    message EnterRoom_S2C_Msg{
      required RoomDTO roomDTO=1;
    }
    
    //cmd=200004|离开房间
    message LeaveRoom_C2S_Msg{
      required int64 roomId=1;
    }
    
    //cmd=200004|离开房间
    message LeaveRoom_S2C_Msg{
      required int64 roleId=1;
    }
    
    //cmd=200005|递交指令
    message CommitCommand_C2S_Msg{
      required CommandDTO commandDTO=1;
    }
    
    //cmd=200006|断线重连
    message Reconnect_C2S_Msg{
      required int64 frameId=1;//帧数
    }
    
    //cmd=200006|断线重连
    message Reconnect_S2C_Msg{
    required int64 startFrameId=1;//开始帧数
    required int64 endFrameId=2;//结束帧数
    repeated FrameDTO frameDTO=3;
    }

    匹配房间信息

    message RoomDTO{
          required int64 id=1;
          required string name=2;
          optional bytes info=3;//地图信息
          repeated NPlayerDTO playerDTO=4;
          optional int64 frameId=5;//当前帧
          repeated FrameDTO frameDTO=6;//历史帧集合
          
    }

    指令信息

    message CommandDTO{
      required int32 type=1;
      optional float x=2;//
      optional float y=3;//
      optional float radius=4;//轮盘半径
      optional string skillId=5;//技能id
    }
    message RoleCommandDTO{
      required int64 roleId=1;
      repeated CommandDTO commandDTO=2;
    }
    message FrameDTO{
      required int64 frameId=1;
      repeated RoleCommandDTO roleCommandDTO=2;
    }

    上面的也可以把所有指令集放到一个队列里,

    如何做到按照不同的间隔播放?

    ————–

    PS:可以把整段战斗过程的操作和随机数种子记录下来,不但可以当录像播放,还可以交给另外一台服务端延迟验算,还可以交给其他空闲的客户端验算,将验算结果的 hash值进行比较,如果相同则认可,如果不通则记录或者处理,服务端如果根据游戏当前进程加入一些临时事件(比如天上掉下一个宝箱),可以在广播的时候附带。

    断线重连的话,需要在断线前到连线上来之间漏下的帧都加速播放。

     

    所有的运算都需要基于整数或者叫定点数,不能是浮点数(只针对逻辑帧来说,渲染帧随便)

    很多人初次接触帧同步里面的问题,就是在写逻辑的时候和本地进行了关联、和“我”相关,这样就导致不同客户端走到了不同的分支。实际上,真正客户端跟逻辑的话,要跟我这样一个概念无关。

    那么为什么不卡顿了,画面不抖动了?

    最后一个关键点,是本地插值平滑加逻辑与表现分离。客户端只负责一些模型、动画、它的位置,它会根据绑定的逻辑对象状态、速度、方向来进行一个插值,这样可以做到我们的逻辑帧率和渲染帧率不一样,但是做了插值平滑和逻辑表现分离,画面不抖了,延迟感也是很好的。这里用到了填充帧

    填充帧:由于设备性能和网络延迟等原因,服务器广播频率不可能达到客户端的更新频率。若只使用关键帧来驱动游戏运作,就会造成游戏卡顿,影响体验。因此,除关键帧外,客户端需要自行添加若干空数据帧,以使游戏表现更为流畅

    如何做到逻辑帧和渲染帧分离?

    unity的Update是渲染帧的每一帧,请勿将逻辑直接写在Update里,一次Upadte可能会跑好几次逻辑帧,也可能一次都不跑

     

    玩家进行的摇杆控制,操作太过于频繁,如果每次都直接向服务器发送操作,会导致传输流量过大。客户端每间隔50ms,发送一次。而且,还有一个优化,如果客户端按住一个方向不动,不松手,而且不改变方向,就不会发送操作,只有在方向改变的情况下才发送。

    如何做到操作和播放的流畅性?

    一般来说,我们都希望游戏中的角色控制是灵敏的,实时的。我们的游戏角色往往在会玩家输入操作后的几十分之一秒内,就开始显示变化。在帧同步游戏中,我们可以让玩家一输入完操作,就立刻发包,然后尽快在下一个收到的网络帧中收到这个操作,从而尽快的完成显示。然而,网络并不是那么稳定,我们常常会发现一会快一会慢,这样玩家的操作体验就非常奇怪,无法预测输入动作后,角色会在什么时候起反应。这对于一些讲求操作实时性的游戏是很麻烦的。比如球类游戏,控制的角色跑的一会儿快一会儿慢,很难玩好“微操”。要解决这个问题,我们一般可以学习传输语音业务的做法,就是接收网络数据时,不立刻处理,而是给所有的操作增加一个固定的延迟,后在延迟的时间内,搜集多几个网络包,然后按固定的时间去播放(运算)。这样相当于做了一个网络帧的缓冲区,用来平滑那些一会儿快一会儿慢的数据包,改成匀速的运算。这种做法会让玩家感觉到一个固定延迟:输入操作后,最少要隔一段时间,才会起反应。但是起码这个延迟是固定的,可预计的,这对于游戏操作就便捷很多了,只要掌握了提前量,这个操作的感觉就好像角色有一定的“惯性”一样:按下跑并不立刻跑,松开跑不会立刻停,但这个惯性的时间是固定的。

    参考:

    什么游戏适合帧同步这种技术?

    展开全文
  • 帧同步和状态同步

    万次阅读 2017-06-18 20:03:58
    实时游戏发展迅猛,同步技术也逐渐成为解决方案的核心之一。 本文简单讨论了帧同步和状态同步。
  • unity 实现帧同步

    万次阅读 多人点赞 2019-02-09 17:14:18
    此框架为有帧同步需求的游戏做一个简单的示例,实现了一个精简的框架,本文着重讲解帧同步游戏开发过程中需要注意的各种要点,伴随框架自带了一个小的塔防sample作为演示. 目录: 哪些游戏需要使用帧同步 如何实现一个...
  • 帧同步原理

    千次阅读 2019-01-21 00:40:44
    常见游戏同步方案1、状态同步2、帧同步二、帧同步技术基础概念1.基础概念1.MOBA类游戏基本服务器架构2.通信方式 一.常见游戏同步方案 同步问题的本质是一致性的问题,在同一局多人游戏的过程中,玩家A看到玩家B的...
  • 帧同步与状态同步

    2019-06-05 00:01:04
    最近在做的游戏中要用到网络同步的相关知识,因此针对帧同步与状态同步中查询了一些资料,并且涉及了TCP和UDP在游戏网络同步中的一些优缺点的整理,在这里记录一下 帧同步与状态同步 帧同步:服务器负责转化客户端...
  • 帧同步和状态同步(一)

    千次阅读 2017-11-01 09:26:35
    帧同步什么是帧同步帧同步常被RTS(即时战略)游戏常采用。在游戏中同步的是玩家的操作指令,操作指令包含当前的帧索引。一般的流程是客户端上传操作到服务器, 服务器收到后并不计算游戏行为, 而是转发到所有...
  • 游戏 帧同步 实现

    千次阅读 2017-11-03 20:04:24
    首先简单讲一下帧同步的原理。帧同步是同一场战斗中的各个玩家的操作(比如移动摇杆、点击释放技能等)不立即在客服端执行,而是先上报到服务器。服务器收集并合并所有玩家的操作(必要时进行校验等控制),下发给...
  • 帧同步和状态同步概述

    千次阅读 2018-07-14 16:55:41
    帧同步 适用游戏类型 对于延迟要求较高的游戏,例如:FPS游戏, RTS游戏(即时战略游戏)等。 原理 帧同步不同步状态,只同步玩家的操作指令,操作指令包含当前的帧索引。这里最重要的概念就是 相同的输入 + ...
  • 一般 Android 系统相机的最高帧率在 30 FPS 左右,当帧率低于 20...我们在做相机预览和视频流处理时,对每帧图像处理时间过长(超过 30 ms)就很容易造成画面卡顿,这个场景就需要用到错帧同步方法去提升画面的流畅度。
  • 帧同步相关

    千次阅读 2017-09-21 17:34:30
    请教帧同步问题 您好!跟您请教几个问题:1.帧同步预判玩家输
  • 帧同步 相关

    千次阅读 2017-06-05 19:20:26
    帧同步游戏开发基础分析:结合产品策划,让游戏流畅运行 什么游戏适合帧同步这种技术?  在现代多人游戏中,多个客户端之间的通讯,多以同步多方状态为主要目标。为了实现这个目标,主要有两个方向的技术: ...
  • 游戏中帧同步与状态同步

    千次阅读 2018-05-28 18:18:28
    帧同步: 什么是帧同步帧同步常被RTS(即时战略)游戏常采用。在游戏中同步的是玩家的操作指令,操作指令包含当前的帧索引。一般的流程是客户端上传操作到服务器, 服务器收到后并不计算游戏行为, 而是转发到所有...
  • 游戏后台状态同步与帧同步

    千次阅读 2017-11-11 23:19:12
    最近开始学习一下游戏后台的一些知识,一直很好奇多个玩家之间的数据是如何同步的,查了一下,目前使用的比较多的是状态同步和帧同步。状态同步同步的是游戏中的各种状态。一般的流程是客户端上传操作到服务器,...
  • 帧同步坦克大战移动系统

    千次阅读 2019-12-03 23:44:48
    但是,需要注意,只有房主才可以调用开始帧同步方法。因此,需要加一层判断。 然后,房间内的其他玩家需要监听开始帧同步的广播,接收到开始帧同步的消息之后,进入游戏场景。 game_scene:游戏主场景。(终于到...
  • 帧同步是什么 所谓帧同步(lockstep),其实是同步操作,确保两个客户端逻辑一致,然后服务器接收每个客户端操作(cmd), 然后再下发下去,相同的逻辑,相同的操作,便会播放(DoAction)相同的结果。 如何...
  • 串口通信同步方法(识别一数据的起始结束)  2012-07-08 23:12:10| 分类: 我的自学实践|举报|字号 订阅   引 言  串口通信是日前单片机和DSP等嵌入式系统...
  • 帧同步坦克大战开篇

    2019-12-03 23:41:33
    因为时间有限,每天都是下班业余时间去搞,也是第一次写帧同步,因此遇到了很多问题,也因此学到了很多东西。(不了解这个框架的可以看我之前的简单介绍以及我为什么要用这个框架:惊!!!个人游戏开发者的福音来了...
  • 【参考博文】GAD-网络游戏同步技术引言 帧同步的形式很泛,根据不同游戏,使用的技术范围又不一样,所以大家都在讲方法论,要全面覆盖可能需要较大的篇幅,所以,我简单描述下。 假定大家对帧同步和状态同步有一定...
  • 关于游戏帧同步问题的总结

    千次阅读 2019-02-13 11:53:12
    本文介绍了开发帧同步游戏中的一些经验。包括一些开发和测试过程的方法。以及包含在帧同步游戏中使用Unity的物理引擎的可行性分析及遇到的问题。   帧同步的原理简述 要保证各个客户端的游戏表现同步,主要是...
  • 帧同步游戏的设计

    千次阅读 2016-10-19 22:20:44
    从单机游戏到网络游戏 单机游戏,这里指即时的动作类游戏,玩家输入操作,通过终端运算而进行的游戏。加入了多人网络以后,玩家的输入不仅仅只是在本地的终端上运算,还会通过...帧同步应该是引入多人网络以后,能想
  • 帧同步是由客户端计算,发送命令给服务器,服务器转发命令达到两边客户端显示一致。服务器是不知道具体逻辑的,所以如果两边客户端计算的某些变量出现不一致的时候,就会出现不同步的情况,随着时间的推进,一个小小...
  • 同步的概念 同步技术是数字通信系统中非常重要的技术。一般来说数字通信系统要实现多种同步功能才能实现正确的数据通信任务。其技术目标是实现不同地域收发双方的同步通信互联,实现一致的信息数据交换,因此,通信...
  • unity c#帧同步网络优化方案

    千次阅读 2019-08-06 13:24:54
    unity帧同步实现机制分享: 看了很多文章,也在自己的游戏中亲自编写,整理并实现了一套帧同步方案,废话不多,直接分享。 7.网络重播:这块是帧同步必须做的,我们需要把服务器发过来的每一帧,以及随机种子,...
  • 游戏中帧同步的实现

    万次阅读 热门讨论 2016-05-10 15:45:28
    简介帧同步是一种前后端数据同步的方式,一般应用于对实时性要求很高的网络游戏,常见于dota类和RTS类游戏,如端游中的dota,dota2,梦三国等;手游中的王者荣耀,自由之战等。过程帧同步的过程可以简述为: 各...
  • 此框架专为有帧同步需求的游戏打造,实现了一个最精简的框架,这几篇文章我会详细讲解帧同步游戏的制作要点,伴随框架自带了一个小的塔防demo作为演示. 什么情况下需要使用帧同步 帧同步原理 服务器校验 如何做平台...
  • Unity 3D实现帧同步技术

    万次阅读 多人点赞 2017-05-11 15:38:00
    下面介绍一下帧同步模式,帧同步含义游戏客户端接受来自网络的多个客户端的操作,如果这些操作在各个客户端是一样的,那么多个客户端的显示也就一样了,这就带来了“同步”的效果。所以在这种情况下,各个客户端的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 73,723
精华内容 29,489
关键字:

帧同步方法