【问题标题】:libgdx ashley ecs framework - Small Object Components vs. Large Object Componentlibgdx ashley ecs 框架 - 小对象组件与大对象组件
【发布时间】:2016-07-25 03:43:21
【问题描述】:

在 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 已经添加为Entity Components,您是否需要使用SpriteComponent

我不确定我的 SpriteSystem 是否正确。

【问题讨论】:

    标签: java libgdx amazon-ecs


    【解决方案1】:

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

    【讨论】:

    • 所以你是说像Sprite这样的大对象在ECS中使用不是一个好主意?
    • 这一切都归结为权衡。您需要激活您的系统是有充分理由的。您需要能够轻松地调整游戏的逻辑。有时组件只是触发功能的标记,有时它们是大块代码(尤其是与玩家打交道的代码),在这种情况下,您完全有权分解的不是组件本身,而是系统。您不必强迫您的系统在一个独特的类中实现。
    猜你喜欢
    • 1970-01-01
    • 2015-03-20
    • 1970-01-01
    • 2015-10-06
    • 2015-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多