在libGDX阿什利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
已经添加为Entity
Components
,是否需要使用SpriteComponent
?
我不确定我的SpriteSystem
是否是正确的行为。
1条答案
按热度按时间y53ybaqx1#
在我看来,像阿什利这样的实体组件系统的目标是让系统处理游戏实体的所有组件。假设您将
SpriteComponent
拆分为TextureComponent
、SizeComponent
和TransformComponent
,您将实现TextureSystem
还是SizeSystem
?这些系统将遍历所有实体,如果它们有特定的组件,则在每帧执行一些逻辑。也许你的特定游戏会在一帧一帧的基础上改变大部分实体的大小或纹理,但对我来说,这是不太可能的,你的表现会受到这种设计的影响。阿什利和其他ECS中的示例给予了很好的示例,说明了组件可能是什么:输入、位置、速度、渲染。...现在最好还是坚持下去