2013-12-21 21 views
1

我最近被分配到一個基於實體組件系統的框架。由於我沒有經歷過這個問題,我有一個簡單的問題: 我可以假設,一個實體最多可以有每種類型的一個組件?我的意思是這樣的:ECS-實體可以有多個給定類型的組件

int COMPONENT_COUNT; //number of different components available 

class Entity 
{ 
    COMPONENT* component_list[COMPONENT_COUNT]; 
} 

然後添加成分會像

component_list[component.id]=&component; //can't add more components of this type 

那是一個正確的假設?當一個實體需要兩個或更多相同類型的組件時,我想不出任何情況。

回答

1

那麼,沒有實體組件系統的聖經。但是我知道許多實現都沒有爲此提供任何條款,它們允許實體擁有或不具有某種組件,但不支持多重性。同樣,從設計的角度來看,這似乎是一個相當糟糕的主意(很多複雜性)。你可以讓它工作,但你和我都不能拿出一個用例。 KISS和YAGNI適用,這是一個合理的假設。如果您以後需要添加一個組件兩次或三次,可以通過使用兩種或三種不同類型的組件來輕鬆進行模擬。只有變量可變,你需要改變系統的內部,但這似乎更加奇特。

0

我要提出我的聖經並說,是的,一個實體應該只有一個組件類型!這是褻瀆否則!

不應該創建具有同一類型的多個組件的實體,否則將面臨永恆的詛咒。

我對這個東西通常很鬆散,但是當你允許你的系統有一個給定類型的多個組件連接到一個實體時,這種複雜性會傳播到你的系統的每個角落。

現在,每個系統都必須針對任何組件類型可能有更多相同類型的組件附加到某個實體的假設工作,此時您經常會遇到像物理系統應該設計的問題當一個實體連接了14個位置組件時做。當一個渲染系統發現一個具有15個運動部件但只有4個精靈的實體時,會發生什麼,期望每個精靈部件有一個匹配的運動部件?哪個動作組件用於哪個精靈?

當您只說「每個實體的一個組件類型的一個組件實例」時,生活就變得更加簡單了。

如果你想聚合,那麼就讓你的組件成爲一些東西的集合。而不是Bone組件,使它成爲一個存儲骨骼列表的Skeleton組件。而不是Pixel組件,使它成爲一個存儲一組像素的Image組件。這很好,並且不要求你違反和污衊上面的神聖命令。

相關問題