【问题标题】:Multiplayer game in UDP "Chokes" internetUDP“扼流圈”互联网中的多人游戏
【发布时间】:2015-10-09 09:30:02
【问题描述】:

我尝试制作一个可以运行的 PONG 游戏,然后将其更改为多人游戏。

您可以选择“游戏速度”,这基本上是在球可以移动和发送位置数据之前需要多少周期。

所以每次滴答(默认为 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 连接质量非常低,而且非常滞后。 那么游戏就会变得迟钝。

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

【问题讨论】:

  • 您多久发送一次更新?是每 200 毫秒吗?
  • 我不会每“滴答”一次,我会每隔几毫秒做一次。 200 次循环在现代计算机中算不了什么 - 难怪你们会互相攻击。
  • @Gusdor ,我每隔 'tick' 发送更新,默认情况下是 200 个循环的 while 循环
  • @PazHaviv 你想知道吗?似乎这比在互联网上随便问一个陌生人更有决定性。
  • @JamesThorpe 我目前不想搞乱作弊和反作弊。因为这只是朋友之间的游戏。

标签: c# udp multiplayer lag


【解决方案1】:

这里有一些提示:

  1. 根据时间发送数据包,而不是循环周期。循环周期很大程度上受 PC 上发生的其他事情的影响。这使您可以更好地控制更新的频率,并且不会因系统性能而异。 200 微秒太快了。你不需要那个。
  2. 您的本地网络充斥着数据包并导致了瓶颈。
  3. 减少发送数据包的频率。每秒 5 次是一个不错的开始
  4. 如果更新速度不够快,请执行专业人员的操作。根据过去的更新插入球的去向。例如,您知道方向和速度,所以请做出有根据的猜测!

更新应该是定期的、确定的(您知道它们何时会发生)和非易失性的(缺少一个不是问题)。 尝试降低更新速率,看看会发生什么。

【讨论】:

  • 是的,这就是我现在所做的,我目前每 3 毫秒完成一次(从 200 微秒开始,这是一个很大的差异),而且它很平滑,如果它再次导致窒息,我会尝试插值。我会在几个小时后回复。谢谢:)
猜你喜欢
  • 2011-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-27
  • 2011-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多