多人游戏实施,如果我选择以后可以实施吗?


15

我计划使用XNA构建游戏项目。目前,我不确定是否要添加多人游戏功能,因为我还有很多其他问题需要解决,但我仍然很陌生。我不希望这个项目一定失控。

我的问题是,如果我不打算添加多人游戏支持而进入我的项目,是否容易倒退(通常不是)并添加必要的代码来捕获多人游戏?

Answers:


24

这是从Zoidcom网络库手册中获得的合理建议:

如果您的项目处于计划阶段,建议从一开始就设计用于联网的项目。在项目的后期状态中对网络代码进行锚定很可能导致大规模重构或大量黑客攻击,从而导致难以维护且难以发现的代码。

最干净的方法是将整个游戏当作纯网络游戏来实施。即,实现专用服务器的代码,并将该代码实现为仅服务器代码。以类似的方式实现游戏客户端代码。服务器和客户端可以在相同的进程中运行,甚至不需要使用真实的网络套接字,但是它们应该是独立的实体,并且所有代码都应按这种方式工作。播放器跳跃时,请勿直接更改播放器的跳跃矢量,而应向服务器发送“按跳键”数据包,然后由服务器处理。

这意味着即使在单人游戏中,后台也会运行一个不可见的服务器。同一游戏的多人版本只需连接到远程服务器,而不是本地服务器,多人即可完成。这样做的优点是:

对于单人和多人游戏没有单独的代码,在整个项目的干净代码中测试和开发了网络代码

使用该方案的项目几乎是所有使用Quake引擎,《文明4》,《无冬之夜》等的游戏。

为了在零延迟的同一过程中连接客户端和服务器,可以使用本地套接字。这些由Zoidcom提供,可将数据包直接从一个ZCom_Control传递到另一个,而无需通过OS级套接字。


听起来这是我讨厌的纯服务器授权设置。如果您对服务器的ping较低,则可以正常运行。但是,当ping太高时,屏幕上的操作会延迟。我更喜欢源引擎使用的方法,客户端在本地运行物理和事物,并且立即显示任何动作,但是服务器仍会对其进行检查,以确保人们不会被黑客入侵,以及应该发生的事情是否存在任何不一致之处,服务器会将正确的状态发送到播放器,并使用新数据覆盖客户端模拟。
AttackingHobo 2010年

8
@AttackingHobo:您只是在描述客户预测。您可以将客户端预测和服务器权限完美地结合在一起,并且完全不排除Zoidcom手册中描述的体系结构。

@AttackingHobo @Joe:Zoidcom实际上支持客户端预测^^
Leftium 2010年

2

我同意Leftium答案中的建议。从一开始就为网络设计它,因为以后您将无法添加它

第一次尝试制作多人游戏(甚至没有尝试制作单人游戏!)时,我认为我首先要使游戏开始工作,然后再添加网络。馊主意。我只剩下一个真正无聊的单人游戏的原型,却不知道如何将其转变为多人游戏。我将其完全废弃并重新开始,这次是从一开始就编写多人网络代码。一切都点击了。

我确信从单人游戏开始并添加多人游戏功能并不是没有可能。如果您考虑周全,请正确计划并确保您知道自己的策略,然后再尝试一下。我认为至少要解决这个问题会很有趣。但是,请务必确保您了解如何添加网络的计划。

我认为有一个中间立场(尽管我从未尝试过)。您可以为网络/多人游戏功能编写一些虚拟类,并在编写单人游戏时勤于使用它们。然后,如果您决定实现多人游戏,只需填写虚拟类,就可以完成大部分工作。这非常接近服务器/客户端方法,但是您可以通过减少工作量来摆脱困境。毕竟,单人游戏比多人游戏更容易制作,因此,如果您要像多人游戏一样编写单人游戏,那么为什么不仅仅使其成为多人游戏呢?

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.