2

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

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

4

1 回答 1

2

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

我鼓励你考虑一个单一的游戏对象图。您仍然可以为每个对象设置物理策略和渲染策略,但我建议将它们更多地视为游戏对象的“插件”,而不是单独的对象图。通过这种方式,游戏对象可以拥有一个位置/旋转向量,物理组件和渲染组件都可以访问这些向量。

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

这意味着:

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

总的来说,我不确定这会给你带来多大的好处……但如果你有一些其他的限制,比如第 3 方物理库的设计,这可能是有意义的。

于 2011-12-05T01:21:15.993 回答