现在,在开始之前,我想说我知道没有标准的方法来实现 ECS。但是,我对一种方法感兴趣,但对一件特定的事情感到困惑。
假设您有一个带有 TransformComponent(包含一个位置)和一个 RenderComponent(包含一个 Sprite)的实体,并且您还有一个与实体分开的 RenderSystem。RenderSystem 将使用 RenderComponent 处理所有组件的渲染,并且不会关心它附加到哪个实体。但是由于 Sprite 需要一个位置,所以 RenderSystem 也需要 TransformComponent。
现在是我感到困惑的部分,如果所有组件都存储在它们自己的该组件类型的向量中,我将如何获得所有同时具有 TransformComponent 和 RenderComponent 的实体?我不想使用循环遍历每个系统中的所有实体的幼稚方法,拉出同时具有这两个组件的实体,而是将每个组件都放在组件类型的向量中。此外,系统如何知道 2 个组件属于同一个实体?组件会附加一个 EntityID 吗?
编辑:我刚刚意识到,如果 RenderSystem 循环遍历所有 RenderComponents 并获取实体,然后检查该实体是否还包含 TransformComponent,那么它可以渲染它。但这有点破坏了整个“系统不关心实体”,这也要求组件有一个 EntityID,我仍然不确定它是否应该有。有人请为我澄清这一切。