我正在制作一个实体/组件系统,并且遇到了一些问题,可以根据它们的继承组件来选择实体。让我们举个例子:如何浏览继承系统?
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)进行扩展。而我无法弄清楚如何从父级获取所有组件。只有循环的重叠/联锁才可行吗?
谢谢。