在libGDX ashley ecs框架中,我们需要将大object
拆分为Components
。我想看看SpriteComponent
(Sprite
仍然很大object
)到TextureComponent
,SizeComponent
,PositionComponent
,{ {1}},OriginComponent
,RotationComponent
(或ScaleComponent
& 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
,SpriteComponent
& Texture
,则需要使用Transform
Size
Component
已添加为Entity
Components
?
我不确定SpriteSystem
是否是正确行为。
答案 0 :(得分:1)
我认为,实体组件系统(如Ashley)的目标是让系统处理游戏实体的所有组件。假设您将SpriteComponent
分成TextureComponent
,SizeComponent
和TransformComponent
,您会实施TextureSystem
还是SizeSystem
?这些系统将迭代所有实体,如果它们具有特定组件,则每帧执行一些逻辑。也许你的特定游戏会逐帧改变大多数实体的大小或纹理,但对我来说,它不太可能,你的表现会受到这种设计的影响。 Ashley和其他ECS中展示的例子给出了一个很好的例子,说明组件可能是什么:输入,位置,速度,渲染......目前可能做的好事就是坚持下去。