我一直在腦海中敲打這個問題幾天,現在還沒有得到任何令人滿意的結論,所以我想我會問SO員工的意見。對於我的工作我使用的組件對象模型所描述的here和here遊戲。它實際上運行得很好,但是我目前的存儲解決方案已經變得非常有限(我只能通過他們的類名或任意的「家族」名稱來請求組件)。我想要的是能夠請求一個給定的類型並遍歷該類型的所有組件或從它派生的任何類型。分層組件存儲的結構
在考慮這個,我第一次實施了通過存儲的順序派生類型的基類的簡單RTTI方案。這意味着sprite的RTTI例如:component :: renderable :: sprite。這使我簡單地通過比較B的所有元素很容易地比較類型,查看是否是由B型派生類型A:即組分::渲染::子畫面是從組分::渲染但不組分::計時器的。簡單,有效,並已實施。
我現在想要的是組件存儲在表示層次結構中的生活方式。 ,想到的第一件事是使用類型爲節點樹,像這樣:
component
/ \
timer renderable
/ / \
shotTimer sprite particle
在我會存儲類型的所有組件的列表中的每個節點。這樣請求「component :: renderable」節點將允許我訪問所有可渲染組件,而不管派生類型如何。該擦的是,我希望能夠有一個迭代器訪問這些組件,這樣我就可以做這樣的事情:
for_each(renderable.begin(), renderable.end(), renderFunc);
,並有從渲染下是遍歷整個樹。我有這個幾乎用真難看圖/矢量/樹節點結構和跟蹤的我一直在節點堆棧中的自定義前向迭代工作。雖然我一直在實施,但我覺得必須有更好,更清晰的方式......我只是想不出一個:(
所以問題是:我是否過度複雜化這是不必要的嗎?一些明顯的簡化我的思念,或預先存在的,我應該使用結構?或者這只是inheritly一個複雜的問題,我可能做就好了嗎?
感謝任何輸入你!
我需要遍歷比添加/刪除多了,我計劃在幾百到幾千部件的時間,視情況而定。我已經考慮過你說過的方法,但仍然沒有排除它,但我不是存儲要求的忠實粉絲。不過,可能是最好的選擇。 – Toji 2009-04-15 03:17:41