在C ++中具有不同类的子/父结构

时间:2012-07-19 09:41:52

标签: c++

我决定使用自己的简单引擎制作我的下一个游戏。我已经为对象渲染,物理等编写了一些代码,现在我正在考虑如何轻松地将它们连接在一起。

我想用一个主对象制作层次结构,让我们称之为具有父级为Sprites或InteractiveObjects的场景,并且每个Sprite或InteractiveObject都可以拥有自己的子节点,这个子节点将拥有自己的子节点。我想你已经拥有了它点这里:))

让我们假设,每个对象类型都将从某个基础对象继承,让我们称之为Node。我不确定,如果Node将是“真正的”对象,它将具有其大小,位置等,或者只是游戏中每个对象的抽象包装器(实际上我倾向于选择两个)。

最后。我的目标是,拥有实际场景的对象,调用类似Scene-> Move(x,y)的东西,它将移动Scene的每个子节点(或Sprite,InteractiveObject等)。或者Scene-> Render(),它将呈现每个(可渲染的)子项。如果我创建Sprite,我想添加像Sprite一样的子 - > addChild(),child可以是另一个Sprite,InteractiveObject或者只是简单的Node。

现在我的问题。使用C ++实现它的最佳方法是什么?或者我完全错了,这种结构是愚蠢的? :)

1 个答案:

答案 0 :(得分:0)

我认为结构是否合理取决于你真正想要达到的目标 - 系统听起来非常灵活,但通常需要在灵活性和性能之间进行权衡。根据游戏的类型,性能可能很难达到。

此外,如果所有东西都来自某些BaseNode,它们都需要(尽管可能是空的)各种方法的方法,无论它们是否真的可以被渲染,移动等。或者你最终会得到很多dynamic_cast,这也不是很好。因此,在游戏实体和图形实体之间具有稍微不那么灵活性和区分可能会更好,后者是前者的一部分(您可能希望允许游戏实体由多个图形实体或子实体组成,虽然)。

如果你确实使用了当前的体系结构,我应该认为每个BaseObject都有一个像vector这样的东西,当你在一个主对象上调用render()时,它会遍历它的所有子节点并调用它们。他们也这样做,并做任何适合他们的渲染代码。

另一个问题是,对象是否可以可行地附加到其他几个对象(例如,如果渲染和物理之间存在差异)。如果是这样,除非你不使用普通的BaseObject *,而是使用某种形式的auto_ptr或shared_ptr,否则它可能会很难知道何时删除一个对象。

我希望这个答案对你有所帮助,不过我意识到这不是一个简单的“这就是他们的方式!”之一。