2012-07-19 60 views
0

我决定使用我自己的简单引擎创建我的下一个游戏。我已经为对象渲染,物理等编写了一些代码,现在我正在考虑如何轻松地将它们连接在一起。C++中不同类的子/父结构

我想用一个主对象制作分层结构,我们称之为Scene,它将父对象作为Sprites或InteractiveObjects,并且每个Sprite或InteractiveObject都可以有自己的子对象,并拥有自己的子对象。我想你已经拥有了我的观点:)

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

最后。我的目标是,有实际场景的对象,调用像场景 - >移动(x,y),它将移动场景(或雪碧,InteractiveObject等)的每个孩子。或场景 - >渲染(),它会呈现每个(可呈现)的孩子。如果我创建Sprite,我想添加像Sprite-> addChild()这样的子项,而child可以是另一个Sprite,InteractiveObject或简单的Node。

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

+1

不愚蠢,它看起来像[合成模式](http://en.wikipedia.org/wiki/Composite_pattern)。 – juanchopanza 2012-07-19 09:48:53

回答

0

我应该认为结构是否合理取决于您真正想要达到的目标 - 系统听起来非常灵活,但通常在灵活性和性能之间存在权衡。根据游戏的流派,性能可能会很难满足。另外,如果所有东西都来自某个BaseNode,它们都需要(尽管可能是空的)方法来处理所有类型的东西,而不管它们是否可以被渲染,移动等等。或者你最终会得到大量的dynamic_casts ,这也不是很好。因此,稍微少一点灵活性并区分游戏实体和图形实体可能会更好,后者是前者的一部分(您可能希望允许游戏实体由多个图形实体或子实体组成,虽然)。

如果你确实按照你当前的体系结构去做,我应该认为每个BaseObject都有一个类似于vector的东西,当你在主对象上调用render()时,它会遍历它的所有子对象并调用它们的渲染。他们也是这样做,并执行任何适合他们的呈现代码。

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

我希望这个答案能帮助你一点,虽然我意识到这不是一个简单的“这是他们的方式!”一。

+0

没关系。我对如何使用BaseNode有类似的想法,但想从其他人那里听到它。我的问题并没有简单的“这是我的想法”。 – 2012-07-19 11:15:02