2012-07-19 62 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