【问题标题】:Game network programming synchronizing graphs游戏网络编程同步图
【发布时间】:2013-07-25 17:39:20
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: network-programming game-engine


    【解决方案1】:

    我怎样才能确保当客户端收到一些更新时 会更新正确的对象吗?

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

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

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

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

    嗯,应该由你来解决这个问题,因为这真的取决于你的游戏系统。我的建议是尝试跳过他们的更新,看看出现了什么问题并修复它们。

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多