摘要:
我的50%完成了与Box2D作为物理引擎的2D旁白应该有多人在最后版本的支持。然而,当前的代码只是一个单人游戏。
单机游戏的性能应该尽可能好(使用回送服务器模拟物理,实现单机模式将是一个问题)
全部背景/问题:
我正在C++中做一个比较大的2D游戏项目,其中的核心元素是物理。(我使用Box2D )
完成的游戏应该有完整的多人游戏支持,但是我犯了一个错误,就是我没有正确地规划网络部分,直到现在我才基本完成了一个单人游戏。
我认为多人游戏支持可以以相对简单和清晰的方式添加到即将完成的单人游戏中,但显然,从我所读到的情况来看,这是错误的。
我甚至读到,多人游戏应该从一开始就被编程为一个游戏,而单玩家模式实际上只是托管一个不可见的本地服务器,并通过回环连接到它。(我发现大多数FPS游戏引擎都是这样做的,比如Source)
所以我在这里,我已经完成了半个2D的副手游戏,我真的不知道怎么继续下去。
对我来说,继续在单机/客户端上工作对我来说是没有用的,因为我以后还得重新编码和重构。
首先,对于可能陷入这种情况的人,有一个一般性的问题:
然后,更具体的是--我一直在试图找出如何在我的游戏中使用社交部分:
用于singleplayer的
这将具有这样的优势,即在单机模式和多人模式之间基本上没有区别。不需要太多额外的代码。
一个很大的缺点:单机的性能和其他限制。将有两个物理模拟运行。一个用于客户端,另一个用于回送服务器。
即使您通过为来自回送服务器的数据提供直接路径,例如通过线程的直接通信,单播放器也是有限的。
这是一个问题,因为人们应该被允许同时玩大量的物体。
在单机模式中不会有服务器参与。
我不太确定这是怎么回事。但至少我认为会有很多额外的工作,因为所有的单播放器功能将不得不重新实现或粘到多人模式。
作为singleplayer模块的
这只是我的一个快速的想法。多人游戏可以由一个单人游戏组成,另有一个网络模块加载并连接到服务器,服务器发送和接收数据,并更新单机游戏世界。
在回顾中,我后悔之前没有计划多人游戏模式。我真的被困在这一点上,我希望这里的人能够帮助我!
发布于 2011-02-27 19:54:59
我认为Notch正在感受到分别开发SP和SMP的痛苦。特别是因为他告诉Bukkit开发团队,他计划过渡到“本地服务器单玩家”的方法(正如您所说的,就像Source )。
没有理由要运行多个物理模拟,本地服务器和客户端之间的延迟可以忽略不计,延迟补偿可能会被完全禁用。
这里有两个基本的模型:一个专门的服务器程序,它可以完成游戏中所有的大脑,并允许客户端连接。根据用户设置,游戏基本上可以充当服务器或客户端。没有单独的服务器程序。
制作客户端最简单的方法是在对象中添加“虚拟”标志,这样这些虚拟标志将由服务器直接控制。然后,进入插值。(以60赫兹传输对象更新是不现实的,所以点之间的平滑使得事情看起来仍然不错。源代码通过添加一些人为延迟来实现这一点,如果你曾经在一个不太常见的互联网连接上玩过GTA4多人游戏,你可以看到在快车上过度使用的效果。)
同时,推荐阅读:http://developer.valvesoftware.com/wiki/Source_Multiplayer_Networking
发布于 2011-02-27 19:39:11
您可以使用哑渲染终端方法。它的优点是,它是相对容易的集成,而不设计它到你的引擎从一开始。缺点是,延迟不会通过预测技术得到补偿,而且如果有许多可见对象,带宽可能会很高。
一种观点是将游戏状态及其演变与图形分离。因此,每一帧,你把游戏状态转换成一个图形表示(剔除屏幕外的东西)。然后在单机游戏中直接渲染,在多人游戏中,你通过网络发送图形表示。并将输入通过网络发送到服务器。
它的工作效果取决于绘制对象的数量以及它们的图形描述有多复杂。但是这种描述对于2D游戏来说通常是很小的。
我希望这在局域网中能很好地工作,因为它有很好的延迟和带宽。不知道它在互联网上运行得有多好。
这是一个描述虚幻的网络代码工作方式的文档。并在导言中介绍了几种较为简单的方法。您可能需要实现其中的一个。http://unreal.epicgames.com/Network.htm
https://stackoverflow.com/questions/5135393
复制相似问题