【发布时间】:2017-05-04 16:01:53
【问题描述】:
我正在制作一个实体/组件系统,但在制作一个可以根据继承的组件选择实体的函数时遇到了一些问题。举个例子:
Animal (1)
Dog (2)
Doberman (3)
Rottweiler (3)
Cat (2)
Siamese (3)
Persian (3)
如果你不熟悉实体组件系统,假设我想要一只名为“Rex”的杜宾犬,我会这样做:
let Rex: Entity = createEntity("Doberman");
Doberman 组件延伸到 Dog,而 Dog 延伸到 Animal。所以 Rex 接收到所有这三个组件的属性。
现在,当我想选择所有具有 Animal 组件的实体(即“selectEntities(Animal)”)时,我还想选择 Dogs、Cats、Dobermans 等。换句话说:所有继承的组件。这就是我卡住的地方,因为它必须是动态的,并且考虑到任何继承组件链,无论其中有多少级别。在我的第一个版本中,组件只能由另一个组件继承,这使得简单的循环成为浏览所有实体的简单解决方案。
现在,一个特定的组件仍然可以仅扩展到另一个组件(Dog 到 Animal),但它可以扩展到无限数量的组件(Doberman 和 Rottweiler 的 Dog)。而且我不知道如何从父级获取所有组件。仅通过重叠/联锁循环是否可行?
谢谢。
【问题讨论】:
标签: javascript inheritance components entity