UDP "Chokes" 互联网多人游戏

Multiplayer game in UDP "Chokes" internet

我尝试制作了一个 PONG 游戏,然后将其更改为多人游戏。

您可以选择"Game Speed",这基本上是球可以移动和发送位置数据所需的周期数。

所以每次报价(默认为 200)服务器都会将其发送到

pos:{0}:{1}&ballpos:{2}:{3}&gametick:{4}

(当然是 String.Format)

客户端每次将其发送到服务器:

pos:{0}:{1}

为了将客户端位置与托管播放器同步。

它用这个函数发送消息:

public static void sendMessage( String message , UdpClient client)
{
Byte[] toSend = new byte[55];
toSend = Encoding.ASCII.GetBytes(message);
client.Send(toSend, toSend.Length);
}

现在当我们玩游戏时,例如我们在 skype 上,Skype 连接质量真的很低,而且非常卡顿。 然后游戏变得卡顿。

是否有更有效的方式将数据发送到同步位置?

这里有一些提示:

  1. 根据时间发送数据包,而不是循环周期。循环周期在很大程度上受 PC 上发生的其他事情的影响。这使您可以更好地控制更新的频率,并且不会因系统性能而异。 200 微秒 快得离谱。你不需要那个。
  2. 您正在用数据包淹没您的本地网络并造成瓶颈。
  3. 减少发送数据包的频率。每秒 5 次是一个很好的数字
  4. 如果更新速度不够快,请按照专业人士的做法进行操作。根据过去的更新插值球的去向。例如,您知道方向和速度,所以请进行有根据的猜测!

更新应该是有规律的、确定性的(你知道它们什么时候会发生)和非易失性的(丢失一个不是问题)。 尝试降低更新速率,看看会发生什么。