游戏网络编程同步图

时间:2013-07-25 17:17:38

标签: network-programming game-engine

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

我计划在服务器级别运行游戏,然后在客户端发送更新。我面临的问题是对象创建。假设一个玩家开枪,那些镜头本身就是新物体。这些将需要创建。

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

如何确保客户端收到更新后会更新正确的对象?

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

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

1 个答案:

答案 0 :(得分:1)

  

如何确保客户端收到更新后再进行更新   会更新正确的对象吗?

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

  

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

我真的不明白你所说的原则,但如果你担心在遍历它时编辑你的场景图(或游戏对象列表),你可以把新创建的对象放到另一个列表中,然后插入新的遍历完成后的那些。他们将从下次更新开始更新。 (您应该考虑如何删除对象)

  

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

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

  

如何跟踪玩家何时可以看到对象?

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

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

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