2013-04-07 111 views
-1

假设我想通过只发送位置变化而不是绝对位置来加速实时游戏中的网络连接。我该如何处理丢包?如果丢弃了一个数据包,则在下一次更新之前,该对象的位置将会出错。状态变化和数据包丢失

+0

如果您不能容忍数据包丢失,请使用TCP/IP而不是UDP ... – Floris 2013-04-07 19:21:04

+0

@弗洛里斯这只是不缩放。许多MMORPG必须处理这个*非常*的事情,而且他们通过UDP进行处理。 – casperOne 2013-04-10 12:01:48

回答

0

考虑到@ casperOne的评论,这就是为什么有些游戏会因为糟糕的连接而“失灵”的原因之一。

一个可能的解决方案是如下:

  1. 决定你能忍受被显示在错误的位置中的目标/播放时间最长的 - 说xx毫秒。放置一个看门狗定时器,该定时器每隔xx毫秒发送一个对象的“至少”位置,或每当计算一个新位置时。
  2. 根据链接的质量以及场景的复杂程度,您可以缩短xx的值。基本上,如果您没有使用可用带宽,请开始发送没有更新发送时间最长的对象的当前位置。

要做到这一点,您需要按照您更新的顺序维护一个项目列表,并在其中旋转。

这意味着快速更改会立即反映出来(如果对象每ms更新一次,您可能会经常收到一个数据包,因此几乎没有任何滞后),但在再次获得机会之前,它绝不会超过xx ms具有更新的状态。