如何在基于组件的游戏架构中处理游戏对象数据?

时间:2011-12-05 00:58:12

标签: game-engine data-sharing

我正在构建一个基于组件的游戏对象架构。在我的情况下,我有renderables和物理对象。渲染场景包含可渲染的内容。物理场景包含物理对象。我有一个具有可渲染和物理对象的游戏对象。这些中的每一个都具有绝对零耦合。他们甚至在不同的图书馆里。

游戏对象需要的一个更明显的数据是位置和旋转。可渲染和物理对象都需要读取此信息,并在某些情况下写入它。有哪些有效的方法来处理特定于游戏而不是组件的信息,但某些组件是否需要这些方法?

1 个答案:

答案 0 :(得分:2)

对我来说,这似乎是一个有点奇怪的架构 - 你将被迫做很多工作来保持两个独立的场景图同步,你可能会发现不可能让它们完全被解除(你在描述的情况)问题就是一个例子,但会有更多......)

我鼓励你考虑单个游戏对象图。您仍然可以为每个对象提供物理策略和渲染策略,但我建议将它们视为游戏对象的“插件”而不是单独的对象图。这样,游戏对象可以具有物理和渲染组件访问的位置/旋转向量。

如果您不想重新构建单个游戏对象图,则另一种方法是将位置/旋转信息分离成单独的结构,例如,大量的向量。 Physics和Render对象都可以共享对此结构的访问。

这意味着:

  • 物理和渲染对象都需要知道它们在数组中的位置索引(通过直接存储索引,或者通过某种形式的散列查找)
  • 物理和渲染对象都必须对相同的位置/旋转格式感到满意
  • 当创建/销毁对象时,您需要额外的簿记
  • 你必须对并发性有点小心,例如:如果在渲染过程中添加了新的Physics对象会发生什么?

总的来说,我不确定这会让你获得多少......但如果你有其他一些限制,例如第三方物理库的设计,它可能会有意义。