我正在製作一個實體/組件系統,並且遇到了一些問題,可以根據它們的繼承組件來選擇實體。讓我們舉個例子:如何瀏覽繼承系統?
Animal (1)
Dog (2)
Doberman (3)
Rottweiler (3)
Cat (2)
Siamese (3)
Persian (3)
如果你不熟悉的實體組件系統,讓我們說,如果我想要一個名爲「雷克斯」杜賓犬,我會做這樣的事情:
let Rex: Entity = createEntity("Doberman");
的杜賓犬組件延伸到狗,狗延伸到動物。因此,雷克斯接收所有這三個組件的屬性。
現在,當我想選擇具有Animal組件的所有實體(即「selectEntities(Animal)」)時,我也想選擇Dogs,Cats,Dobermans等。換句話說:所有繼承的組件。這就是我被卡住的地方,因爲它必須是動態的,並考慮到任何繼承組件的鏈,無論它有多少層。在我的第一個版本中,組件只能被其他組件繼承,這使得簡單的循環成爲瀏覽所有實體的簡單解決方案。
現在,一個特定的組件仍然可以擴展到只有一個其他組件(Dog to Animal),但它可以通過無限數量的組件(來自Doberman和Rottweiler的Dog)進行擴展。而我無法弄清楚如何從父級獲取所有組件。只有循環的重疊/聯鎖纔可行嗎?
謝謝。