Ios好玩的网络游戏:处理网络游戏中的延迟问题(latency in networking)

我正在考虑制作一款网络游戏。我对此有点陌生,并且已经遇到了很多问题,试图为航位推算和网络延迟制定一个好的计划,所以我很想看到一些关于这个主题的好的文献。我将描述我考虑过的方法。

最初,我只是将玩家的输入发送到服务器,在那里进行模拟,然后将游戏状态的变化广播给所有玩家。这使得作弊变得困难,但是在高延迟的情况下,事情有点难以控制,因为您不会立即看到自己操作的结果。

This GamaSutra article有一个解决方案,可以节省带宽,并通过在客户端上进行模拟来使本地输入看起来流畅,但似乎可以防止作弊。另外,我不确定当玩家开始操纵环境,推动岩石等时该怎么办。这些以前中立的对象将暂时成为客户端需要向 PDU 发送的对象,或者可能是多个玩家一次发送的对象。谁的 PDU 会与被双重跟踪的玩家进行比较?

This gamedev.net bit显示 gamasutra 解决方案是不够的,但描述了一种不同的方法,它并不能真正解决我的协作巨石推动示例。我发现的大多数其他东西都是针对射击者的。我希望看到更适合像 SNES Zelda 一样玩的游戏,但涉及更多的物理 / 动量。

注意:我不是在这里询问物理模拟-其他库已经涵盖了。只是使游戏流畅和反应性的策略,尽管网络延迟。

21

查看 Valve 如何在源引擎中执行此操作:http://developer.valvesoftware.com/wiki/Source_Multiplayer_Networking

如果是第一人称射击游戏,您可能必须深入研究他们提到的一些主题,例如:,补偿和插值。

11

我发现 Glenn Fiedler 的this network physics blog post,甚至更多,因此的响应 / 讨论,真棒。这是相当漫长的,但值得的。

In summary

每当在现代游戏物理模拟(即车辆或刚体动力学)中接收到客户端输入时,服务器都无法跟上重复模拟的步伐。因此,服务器会在服务器之前命令所有客户端延迟 + 抖动(时间),以便所有传入数据包在服务器需要之前都以 JIT 形式出现。

他还概述了如何处理您要求的所有权类型。他在 GDC 上展示的幻灯片很棒!

关于作弊

Fiedler 先生本人(和其他人)指出,该算法的缺点是不能很好地防止作弊。事实并非如此。与传统的客户端 / 服务器相比,该算法同样容易或难以利用(请参阅@CD Sanchez' answer中有关传统客户端 / 服务器的文章)。

要绝对清楚:服务器并不容易作弊,因为它及时接收网络物理定位(而不是像传统那样晚 x 毫秒)。客户端根本不受影响,因为它们都以与传统完全相同的延迟接收对手的位置信息。

无论您选择哪种算法,如果您要发布主要标题,都可能需要添加作弊保护。如果是,我建议添加针对stooge bots的加密(例如an XOR stream cipher,其中“密钥流是由伪随机数生成器生成的”)和针对调试漏洞的简单健全性检查。一些开发人员还实现了算法来检查二进制文件是否完好无损(以降低破解的风险),或者确保用户

如果你只是制作一个较小的独立游戏,可能只有几千个玩家玩,不要费心实施任何算法,直到 1)你需要它们;或 2)用户群增长。

2

我们已经实现了基于强务器和进行的远程玩家的多人蛇游戏。服务器每 150 毫秒 (在大多数情况下) 发回一条消息,其中包含每个远程玩家发送的所有合并动作。如果远程客户端移动延迟到达服务器,他将丢弃它们。客户端将重放最后一个动作。

0

在 XNA Creator 's Club 网站上查看 Networking 教育主题。它深入研究了网络架构 (对等或客户端 / 服务器) 、网络和其他一些主题 (当然是在 XNA 的背景下)。这可能会帮助您找到您正在寻找的答案。

http://creators.xna.com/education/catalog/?contenttype=0&devarea=19&sort=1

本站系公益性非盈利分享网址,本文来自用户投稿,不代表边看边学立场,如若转载,请注明出处

(169)
Xn xx nx:if (xn= = xx){中的错误:缺少需要TRUE/FALSE的值
上一篇
Ios研发:什么是ios::in|ios::out
下一篇

相关推荐

发表评论

登录 后才能评论

评论列表(34条)