同步问题

因为制作的是一个简易版的。
所以很多的同步,全部依赖于客户端自己来完成。

我们有哪些东西是由客户端自己来实现的同步呢?

  1. 鱼位置同步。
    这个问题,我们处理了很多版本。
    第一种是以服务器记录每条鱼已存活多久的时间为记录,然后客户端以这个记录时间来算出当前鱼所处的坐标位置index。
    但是这种方式在客户端出现一些卡帧的情况后,就会导致蝴蝶效应,后续的偏差越来越大。
    第二种 服务器记录鱼的产生时间,然后客户端自己在每帧中计算鱼的已存活时间,然后计算出当前鱼所处的坐标index。
    这种方式,就算是会出现卡帧,但是客户端也会在后续的每帧刷新中同步矫正相应的位置。

  2. 炮台的角度同步。
    正常情况下,我们在每次开炮时都将对于炮台的角度,由服务器同步给了其他玩家。这个没什么问题。
    但是,在锁定鱼的情况下的角度同步,如果鱼位置的同步没什么问题,那么这个也不会有什么问题,
    但是因为是由纯客户端进行的鱼位置同步,那么就总是会出现一些无法意料的同步问题。所以当不同客户端的鱼位置不同时,
    那么从炮台到对应的锁定的鱼之间的角度就会出现偏差。而炮台是同步的对应的炮台的角度,但子弹的角度,却是由锁定鱼位置和炮台位置计算出来的角度。所以就会出现,炮台角度朝向和子弹发射的角度朝向出现偏差。
    那么,我的解决办法是,当没有锁定的鱼时,炮台直接同步服务器下发的角度,如果有锁定鱼,那么炮台角度,直接重新在客户端本地计算出当前的炮台角度和子弹角度。使自己的客户端看起来是完全正常的。就算鱼的位置不同步,也依然不会有问题。

  3. 随机小鱼群的同步。
    客户端会出现一些同种鱼走相同路线,但是位置又有一些偏差的小鱼群。
    小鱼群的实现,是由客户端自身计算出这一波鱼里,其中的一部分鱼能组成小鱼群,然后计算出每条鱼的位置偏移来实现鱼群的效果。
    而这个位置的偏移是由随机数来实现的。那么我们想要在不同的客户端上看到的小鱼群是一样的,就需要同步这个随机种子。
    我们以这个鱼群的产生时间做为随机种子,那么就算是在不同的客户端,我们也依然能够同步这个随机种子,达到我们想要的随机效果。

你可能感兴趣的:(同步问题)