libgdx ashley ecs 框架 - 小对象组件与大对象组件

libgdx ashley ecs framework - Small Object Components vs. Large Object Component

在 libGDX ashley ecs 框架上,我们需要将大 object 拆分为 Components。我想看看SpriteComponentSprite还是大object)到TextureComponentSizeComponentPositionComponentOriginComponentRotationComponentScaleComponent(或TransformComponent & SizeComponent)。

TextureComponent - @field: TextureRegion region
SizeComponent - @field: float width, float height
TransformComponent - @field: Vector2 position, Vector2 origin, Vector2 scale, float rotation

entity.add(texture);
entity.add(size);
entity.add(transform);

V.S

SpriteComponent - @field: Sprite sprite

entity.add(sprite);

or the combination of both

entity.add(texture);
entity.add(size);
entity.add(transform);
entity.add(sprite);

SpriteSystem - overrides the size and transform components
RenderingSystem - uses the texture, size, transform components to draw object

问题 如果 Texture ,Transform & Size Component 是否需要使用 SpriteComponent已添加为 Entity Components?

我不确定我的 SpriteSystem 这是否是正确的行为。

在我看来,像 Ashley 这样的实体组件系统的目标是让系统处理游戏实体的所有组件。假设您将 SpriteComponent 拆分为 TextureComponentSizeComponentTransformComponent,您会实施 TextureSystem 还是 SizeSystem?这些系统将遍历所有实体,如果它们具有特定组件,则在每一帧执行一些逻辑。也许你的特定游戏会逐帧改变大多数实体的大小或纹理,但对我来说,这不太可能,而且你的性能会受到这种设计的影响。 Ashley 和其他 ECS 中显示的示例很好地说明了组件可能是什么:输入、位置、速度、渲染……目前,也许最好的做法是坚持使用它。