Answers:
这是从Zoidcom网络库手册中获得的合理建议:
如果您的项目处于计划阶段,建议从一开始就设计用于联网的项目。在项目的后期状态中对网络代码进行锚定很可能导致大规模重构或大量黑客攻击,从而导致难以维护且难以发现的代码。
最干净的方法是将整个游戏当作纯网络游戏来实施。即,实现专用服务器的代码,并将该代码实现为仅服务器代码。以类似的方式实现游戏客户端代码。服务器和客户端可以在相同的进程中运行,甚至不需要使用真实的网络套接字,但是它们应该是独立的实体,并且所有代码都应按这种方式工作。播放器跳跃时,请勿直接更改播放器的跳跃矢量,而应向服务器发送“按跳键”数据包,然后由服务器处理。
这意味着即使在单人游戏中,后台也会运行一个不可见的服务器。同一游戏的多人版本只需连接到远程服务器,而不是本地服务器,多人即可完成。这样做的优点是:
对于单人和多人游戏没有单独的代码,在整个项目的干净代码中测试和开发了网络代码
使用该方案的项目几乎是所有使用Quake引擎,《文明4》,《无冬之夜》等的游戏。
为了在零延迟的同一过程中连接客户端和服务器,可以使用本地套接字。这些由Zoidcom提供,可将数据包直接从一个ZCom_Control传递到另一个,而无需通过OS级套接字。
我同意Leftium答案中的建议。从一开始就为网络设计它,因为以后您将无法添加它。
第一次尝试制作多人游戏(甚至没有尝试制作单人游戏!)时,我认为我首先要使游戏开始工作,然后再添加网络。馊主意。我只剩下一个真正无聊的单人游戏的原型,却不知道如何将其转变为多人游戏。我将其完全废弃并重新开始,这次是从一开始就编写多人网络代码。一切都点击了。
我确信从单人游戏开始并添加多人游戏功能并不是没有可能。如果您考虑周全,请正确计划并确保您知道自己的策略,然后再尝试一下。我认为至少要解决这个问题会很有趣。但是,请务必确保您了解如何添加网络的计划。
我认为有一个中间立场(尽管我从未尝试过)。您可以为网络/多人游戏功能编写一些虚拟类,并在编写单人游戏时勤于使用它们。然后,如果您决定实现多人游戏,只需填写虚拟类,就可以完成大部分工作。这非常接近服务器/客户端方法,但是您可以通过减少工作量来摆脱困境。毕竟,单人游戏比多人游戏更容易制作,因此,如果您要像多人游戏一样编写单人游戏,那么为什么不仅仅使其成为多人游戏呢?