制作实时多人平台游戏涉及什么?


13

我正在创建一个具有“合作”功能的平台游戏,我想通过网络/互联网来工作。

现在,我已经阅读了有关网络游戏编程的文章,其中包括诸如每个程序员都需要了解的有关游戏网络的文章,因此我了解了Peer-to-Peer锁步和服务器-客户端预测架构等技术之间的区别:

  • 我得出的结论是,对于将要在互联网上玩的任何实时游戏,“对等”锁步根本不是一种选择。
  • 我还担心即使对于平台游戏者,由于服务器往返的作用和反应之间的延迟,简单的客户端-服务器体系结构(没有某种客户端预测)也会导致游戏性能下降。(话虽如此,我想消除对中央服务器的需求,所以只有其中一个参与者,即客户端,实际上会遇到这种延迟)。

这让客户可以预测,但是即使对于像平台游戏这样的简单游戏,这听起来仍然很复杂。

我将如何为多人平台游戏创建有效的客户预测系统?


1
在合作游戏中,您无需担心的一件事就是作弊;)
Jonathan Connell

我将其标记为非建设性的。提出的问题(“编写一个可以根据客户预测进行网络游戏的工作量是多少?我最终将一半的代码库(包括网络代码)吗?”)过于广泛,而且完全不是针对特定问题的。答案基本上是“取决于”,这不是一个好答案。
TravisG 2011年

-1,“多少工作”是主观的。
四分

1
多少工作并不孤立,而是主观的,但它确实取决于一些因素(游戏的大小,准确性要求等),这些因素在工作量大,工作量少或介于两者之间时可能会影响(尽管什么类型的工作,是一个更好的问题); 但是,我认为OP确实在询问需要多少工作以及这种类型的代码在代码库中将占多大的份额。用措辞来说,它可能太宽泛了。我选择了一个更狭义的解释并回答了。我认为,OP应该付出更多努力将问题缩小到几个非常具体的问题。
Nate

@Tetrad对不起-我尽力使这个问题尽可能客观,但是我的问题归结为“为Y型游戏创建一个工作的客户预测系统是否困难”-如果没有,那么我将学习可以,但是我的时间有限,因此在学习X天后学习太多的工作为时已晚。我会尝试提供有关Y的更多详细信息,但我不想提出“过于本地化”的问题。这里的主要问题是运动,这是所有平台游戏者所共有的(我希望其他人发现这个问题很有用)。如果我可以改善这个问题,那么建议是值得的。
贾斯汀

Answers:


5

如果您决定实现此类功能,我认为您的代码库中不会有一半会变成网络代码。

我认为,最简单的方法是设置一个“中央”服务器(即使这意味着一个玩家“托管”游戏然后连接到自己的服务器),该服务器尽可能快地接受所有用户输入,然后将其发送回每个客户端。

在客户端上,这与在本地为两个玩家进行合作游戏时的实现没有什么不同,除了从键盘读取P1,从网络读取P2。

您需要使服务器每隔一段时间发出一次完整的游戏状态,并且两个客户端都可以从服务器捕捉到新的授权状态,或者可以滑入新状态(几秒钟)。除非您遇到可怕的数据包丢失或每台服务器大量客户端的情况,否则此方法足以满足您概述的情况。


这就像使用客户端服务器方法一样简单(除了一个客户端托管服务器->您不需要专用服务器,但必须使用UDP + NAT穿刺线,无论如何都需要一台专用服务器)。其次,您提出了锁步方法(当您谈论发送完整的游戏状态时),恕我直言,这不是最好的方法,如果游戏可以通过互联网运行(虽然可能是通过LAN),则客户端服务器更容易实施。
瓦尔蒙德2011年

1
不,我建议您偶尔发送完整的游戏状态,以便客户端可以确保距离不太远。
Nate

2

我有一个具有客户端预测功能的全功能mMORPG风格的游戏(该游戏尚远未完成,但运行“ OK”),我在服务器的40.000行代码中有一些东西,在客户端的代码中有两倍(为工具等量添加了相同数量的东西) )。预测可能不超过几百条线(即使是那条线),整个网络也有几千条线,但不超过5.000条(这取决于您画线的位置)。

模糊问题模糊答案;-)


2

很大一部分的网络代码可以独立于您所玩的游戏。因此,由于您不熟悉网络,我建议您做的第一件事是找到可以为您完成工作的库。以RakNet为例。

您需要在游戏代码中做的一件事就是能够处理多种不同的游戏状态,并将其用于插值和预测。预先设计起来很简单,但是如果您要修改现有的单人游戏,则可能需要大量工作。

还要注意,如果您想让陌生人通过Internet玩对等游戏,则可能至少需要一台服务器来处理大厅/对接会。

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.