libgdx ashley ecs 框架 - 小对象组件与大对象组件
libgdx ashley ecs framework - Small Object Components vs. Large Object Component
在 libGDX ashley ecs 框架上,我们需要将大 object
拆分为 Components
。我想看看SpriteComponent
(Sprite
还是大object
)到TextureComponent
、SizeComponent
、PositionComponent
、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
问题 如果 Texture
,Transform
& Size
Component
是否需要使用 SpriteComponent
已添加为 Entity
Components
?
我不确定我的 SpriteSystem
这是否是正确的行为。
在我看来,像 Ashley 这样的实体组件系统的目标是让系统处理游戏实体的所有组件。假设您将 SpriteComponent
拆分为 TextureComponent
、SizeComponent
和 TransformComponent
,您会实施 TextureSystem
还是 SizeSystem
?这些系统将遍历所有实体,如果它们具有特定组件,则在每一帧执行一些逻辑。也许你的特定游戏会逐帧改变大多数实体的大小或纹理,但对我来说,这不太可能,而且你的性能会受到这种设计的影响。 Ashley 和其他 ECS 中显示的示例很好地说明了组件可能是什么:输入、位置、速度、渲染……目前,也许最好的做法是坚持使用它。
在 libGDX ashley ecs 框架上,我们需要将大 object
拆分为 Components
。我想看看SpriteComponent
(Sprite
还是大object
)到TextureComponent
、SizeComponent
、PositionComponent
、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
问题 如果 Texture
,Transform
& Size
Component
是否需要使用 SpriteComponent
已添加为 Entity
Components
?
我不确定我的 SpriteSystem
这是否是正确的行为。
在我看来,像 Ashley 这样的实体组件系统的目标是让系统处理游戏实体的所有组件。假设您将 SpriteComponent
拆分为 TextureComponent
、SizeComponent
和 TransformComponent
,您会实施 TextureSystem
还是 SizeSystem
?这些系统将遍历所有实体,如果它们具有特定组件,则在每一帧执行一些逻辑。也许你的特定游戏会逐帧改变大多数实体的大小或纹理,但对我来说,这不太可能,而且你的性能会受到这种设计的影响。 Ashley 和其他 ECS 中显示的示例很好地说明了组件可能是什么:输入、位置、速度、渲染……目前,也许最好的做法是坚持使用它。