2012-10-21 71 views
6

與許多有抱負的設計師和程序員一樣,我偶然發現了實體/組件系統設計,包括關於該主題的各種優秀文章以及一些工作實現。和其他許多人一樣,我自己實施了這樣一個系統。實體系統 - 將組件存儲在管理器與實體中

概念上,一個實體是一個組件包,它只不過是一系列系統要處理的數據包。所以對我來說看起來合乎邏輯的是,一個實體對象可以用來保存與它相關的所有組件,但是其他人的工作卻說不是這樣。在我所有的研究中,似乎幾乎普遍理解一個實體不過是一個ID,並且必須不惜一切代價避免陷入面向對象思維的陷阱。他們建議將組件存儲在管理器中,但不要直接解決這種設計的優點。

這兩個設計,實體中的組件和管理器中的組件都不會產生相同的最終結果嗎?如果我誤解/遺漏了某些東西,請告訴我。

回答

1

我絕對不是實體組件系統的專家,但這裏是我對所讀內容的看法。我認爲你不應該直接訪問組件。如果你這樣做,那麼你的組件開始相互依賴,並且以後,當你決定改變一個組件的行爲時,所有其他依賴於你想改變的組件的組件現在都必須修復。

爲避免此問題,組件不應該彼此瞭解任何內容。他們每個人都有一份工作,只應該專注於這項工作。如果需要從另一個組件獲取某些數據(例如,您可能需要位置數據),則應該向另一個系統請求數據或開發消息傳遞系統。

當然,一旦你真正開始編碼,很難在100%的時間內遵守這個規則,但你明白了。

避免將組件存儲在實體中的另一個原因是爲了提高速度。當系統中包含組件(所有類似組件都存儲在一起)時,可以快速處理大量組件。您有機會設置可能重用的任何數據,循環並處理每個組件,然後釋放任何重用數據。不僅如此,每個系統都可以(應該)能夠在單獨的線程上運行,這使您可以輕鬆利用多個內核。

再一次,在實踐中,這並非總是100%真實,但那是它的理論。總之,將組件保存在系統中而不是實體中會降低直接訪問組件的誘惑力,並且允許在系統中進行批量更新。我希望這會有所幫助,如果您有任何問題,請告訴我。