Questions tagged «game-center»

1
网络客户端-服务器消息交换和时钟同步帮助
我正在做一个快节奏的物理游戏,它是桌上曲棍球。有两个槌和一个冰球。游戏运行在iPhone / iPad上,我正在通过GameCenter做多人游戏。 这就是网络系统的工作方式。带有匹配标记的客户端将作为服务器进行结算,接受匹配请求的将是客户端。 “服务器”具有物理功能,响应是即时的,客户端也具有物理功能,因此在消息交换之间看起来很流畅。我作为服务器的工作是,我将客户的冰球速度和位置发送给客户端,客户端调整与服务器有关的冰球速度/位置以使其保持同步。否则,物理场将失去同步,并且将其拧紧。 当网络延迟很好,在100毫秒以下时,效果很好,我在客户端获得了流畅的可玩游戏,并且怪异的行为降到了最低。当滞后时间约为150到200毫秒时,就会发生此问题。在那种情况下,发生了我的客户冰球已经碰到边缘和反向的情况,但是它收到了来自服务器的延迟消息,并且它后退了一点,从而引起了对球行为的怪异感觉。 我已经阅读了一些有关它的内容: 傍网示例 单击同步示例 维基百科上的时钟同步 那么,我该如何解决呢?据我所知,最好的选择是使用时间戳在服务器/客户端上进行时钟同步,这样当我收到与时钟相关的延迟消息时,我就忽略了,然后让客户端模拟执行工作。你们同意吗?而且由于我发送的数据不可靠(UDP),所以我可能会收到延迟的消息或混乱的消息。 如果那是最好的方法,我如何实现时钟同步。我已经阅读了有关如何操作的步骤,但我不太了解。 它说: 客户端在“时间请求”数据包上标记当前本地时间,然后发送给服务器。 服务器收到后,服务器会在服务器上盖章并返回 客户端收到后,客户端从发送时间中减去当前时间,然后除以2以计算延迟。它从服务器时间中减去当前时间,以确定客户端-服务器时间增量,并加上半延迟以获取正确的时钟增量。(到目前为止,此algothim与SNTP非常相似) 客户重复步骤1至3五次或更多次,每次都暂停几秒钟。在此期间可能允许其他流量,但应将其最小化,以获取最佳结果。数据包接收的结果将被累积,并以最低延迟到最高延迟的顺序进行排序。中值等待时间是通过从此有序列表中选择中点样本来确定的。 丢弃与中位数相差大约1个标准偏差的所有样本,并使用算术平均值对其余样本取平均值。 按照这个例子,我会有这个: 让我们假装游戏已经加载并且我的客户端时间现在是0,所以我向服务器发送我的时间是0。 消息需要150毫秒才能到达服务器,但是服务器的时钟已经启动,并且比客户端提前1秒。服务器收到消息后,时间将是:1.15并将该时间发送给客户端,我们还好吗?假设我们的滞后时间恒定为150ms。 现在客户端接收时间1.15,并从发送的时间中减去当前时间,然后除以2以计算延迟。Wich为:0.3-0 = 0.3 / 2-> 150ms。 它从服务器时间中减去当前时间以确定客户端-服务器时间增量,并添加半延迟以获取正确的时钟增量: 客户端时间:0.3服务器时间1.15 0.3-1.15 = .85 +等待时间(.15)= 1 如何同步?我想念什么? 这是我第一次玩多人游戏和网络游戏,所以我有点困惑。 谢谢。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.