在基于组件的游戏引擎中,我遇到游戏对象/组件之间的关系时会遇到麻烦。
存储关系的位置以及如何删除它们?
为了简单起见,这是一个例子。
Gradius-clone游戏由两种类型的游戏对象组成: -
组件细节如下: -
炮塔组件旨在与主体组件具有 关系 (物理约束或所有权)
要求必须在两个组件之前删除 关系 。
这些是一个特定于示例的描述,以防万一....
删除 Rocket 的步骤必须遵循以下顺序: -
- 删除 约束
- 删除主体组件和炮塔组件(任何顺序都可以)
醇>删除主体组件时,也应删除 关系 ,只留下 Turret Component ,所以让它变成浮动炮塔。
应该在哪里存储 关系 ? (一切似乎都好,但与下一个问题有关。)
如何删除 关系 ? (两者似乎都是坏主意。)
创建一个标记以检查即将删除的主体组件或 Rocket ,然后在删除其他组件之前调用新的专用系统删除关系,必须在每个步骤之前调用其他经理系统。
让其他现有经理在想要删除主体组件或火箭
我期待有很多关系类型的一般情况的答案。 (游戏对象或组件之间)
编辑1 :关于在Rocket的析构函数中直接创建所有权和添加代码的建议解决方案完全违反基于组件的设计。
答案 0 :(得分:0)
在你的Rocket游戏对象的例子中,关系是一个所有权,应该保存在Rocket中。如果您的游戏引擎架构允许,则可以通过管理器系统在删除之前调用的游戏对象中的析构函数来删除该关系。
修改强> 如果您不希望对象或组件知道其所有权或关系,我认为最好的选择是保持关系的列表(如您所建议的)以及对关系所有者的引用。这样你就可以先查看列表,看看你的游戏对象(Rocket)是否可以删除,或者是否有任何关系要先删除。