0

我正在尝试开发一个电脑游戏。我希望这个游戏可以多人玩。游戏是街机太空射击游戏

我计划在服务器级别运行游戏,然后在客户端发送更新。我面临的问题是对象创建。假设如果一名球员投篮,投篮本身就是新对象。这些将需要创建。

在我的游戏中,我有一个层次结构,而镜头本身就是这个结构的一部分。它会像一棵树。我遇到的问题是识别客户端和服务器上的对象。

我如何确保当客户端收到一些更新时它会更新正确的对象?

新对象创建怎么样。在我的例子中,场景图被遍历并且每个对象在从服务器获取更新后被更新。但是创建新对象的更新违反了这个原则。我应该如何处理它们?

此外,我无法真正获得整个场景的更新。我只需要更新玩家可见的特定对象。我应该如何处理其余不可见的对象?当它们变得可见时会发生什么?我如何跟踪对象何时对玩家可见?

4

1 回答 1

1

我如何确保当客户端收到一些更新时它会更新正确的对象?

您可以id为每个对象服务器创建一个唯一的。您可能想要创建一个Object包含id并让所有其他游戏对象类继承自它的超类。或者,您可以有一个地图来链接idobject。或者,您可以混合使用它们。要获得唯一的 id,服务器可以将全局“nextID”作为 int 并简单地分配给一个新对象并为下一个对象增加它。

但是创建新对象的更新违反了这个原则。

我不太了解您所说的原理,但是如果您担心在遍历场景图(或游戏对象列表)时对其进行编辑,则可以将新创建​​的对象放入另一个列表中,然后在遍历后插入新对象已经完成了。他们将从下一次更新开始更新。(你也应该考虑如何移除一个对象)

我应该如何处理其余不可见的对象?当它们变得可见时会发生什么?

好吧,你是应该弄清楚的人,因为它真的取决于你的游戏系统。我的建议是尝试跳过他们的更新,看看出现了什么问题并修复它们。

我如何跟踪对象何时对玩家可见?

此外,还有几种处理方法。服务器可以检测客户端的所有内容并仅发送每个客户端的可见对象信息。或者,每个客户端都可以检测到它们并向服务器发送请求以开始更新可见的。或者,它可以是混合的方式。

首先尝试服务器驱动的,看看服务器是否可以在最大数量的客户端下执行它。要使用客户端驱动的,请记住每个客户端仍然需要更新所有对象位置,无论其可见性如何,但发送仅可见的 AI 更新请求那些。

同样,有很多方法可以处理此类问题,这实际上取决于您的游戏系统要求。这就是为什么在不充分了解您的游戏系统的情况下很难回答您的问题的原因。尝试从一些书籍或谷歌中调查其他类似的多人游戏是如何设计的。祝你好运!

于 2013-07-26T16:34:58.523 回答