2016-07-15 6 views
0

На платформе libGDX ashley ecs мы должны разделить большие object на Components. Я хочу видеть, что край SpriteComponent (Sprite еще большая object) к TextureComponent, SizeComponent, PositionComponent, OriginComponent, RotationComponent, ScaleComponent (или TransformComponent & SizeComponent).libgdx ashley ecs framework - Компоненты малых объектов и компонент большого объекта

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 & SizeComponent уже добавлен в EntityComponents?

Я не уверен в своих SpriteSystem, если это правильное поведение.

ответ

1

Как я вижу, цель системы компонентов сущности, такой как Эшли, состоит в том, чтобы системы обрабатывали все компоненты сущностей вашей игры. Предположим, вы разделили свой SpriteComponent на TextureComponent, SizeComponent и TransformComponent, внесите ли вы TextureSystem или SizeSystem? Эти системы будут перебирать все сущности и, если они имеют конкретный компонент, выполняют некоторую логику, каждый кадр. Возможно, ваша конкретная игра изменит размер или текстуру большинства объектов на кадр за кадром, но для меня это маловероятно, и ваша производительность будет страдать от этого дизайна. Примеры, показанные в Эшли и других ECS, дают довольно хорошие примеры того, что компонент, вероятно, будет: входы, положение, скорость, рендеринг ... и на данный момент, может быть, хорошая вещь - это придерживаться этого.

+0

Итак, вы говорили, что использование большого объекта, такого как Sprite, не рекомендуется использовать в ECS? – ronscript

+1

Все сводится к компромиссам. Вам необходимо, чтобы ваши системы были активированы по уважительной причине. Вы должны легко адаптировать логику своей игры. Иногда компоненты - это просто маркеры, которые вызывают функциональность, иногда они представляют собой большие жирные фрагменты кода (особенно для работы с игроком), и в этом случае вы имеете право разбить не столько сами компоненты, сколько системы. Вы не обязаны внедрять свои системы в уникальном классе. –