Pull to refresh

Comments 6

libGDX — это гарантированный геморрой. Отсутствие редактора сцен, изменяющиеся библиотеки и прочие чудные вещи после которых не раз не удавалось обновить проект заставили сначала перейти на Cocos2d, а позже на Unity
В моем случае было важно внедрить игру в уже готовое приложение. Да, для настройки грэдла — ритуал с бубном обеспечен. А в общем для реализации небольшой игры, на уже знакомом языке, вполне нормальный вариант.

В качестве плюсов, вероятно, стоит упомянуть лучшее использование памяти, так как при обработке системой нужных компонентов, вы не тяните за собой ненужные данные, что уменьшает вероятность, например, промахов кеша.


Тем не менее, в конкретно вашем примере, вы обрабатываете Entity целиком, когда нужно обрабатывать только сами компоненты, иначе вы не получаете такого преимущества и выполнение становится медленнее. Да и тестирование становится чуть сложнее, так как для этого вам приходится все равно создавать и тянуть ещё и Entity, но при этом не так очевидно, так как на вход подаются не компоненты, из-за чего мы не знаем, что именно необходимо для тестирования.


Хотя у меня не так много глубоких знаний по ECS или я что-то не правильно растолковал, могу ошибаться. Жду комментов по этому поводу.

Да, для тестирования это было бы большим плюсом. Но для такого случая в движке вместо цикла придется перебирать все системы вручную передавая в метод обработки каждой системы — компоненты, в качестве аргументов ее метода обработки, с указанием типа каждого компонента. Код поиска компонента для конкретного Entity все равно никуда не денется. Плюс к тому же перед вызовом каждого метода обработки каждой системы придется писать проверку "может ли эта система обработать эту сущность?".
И ещё стоит отметить что в некоторых системах может происходить работа с удалением или добавлением Entity/Component так что сам по себе Entity пригодится при обработке.
А для тестов нужна документация системы с описанием ее работы и требования к входящему Entity.

UFO just landed and posted this here
Для обработки данных, в систему могут подтягиваться дополнительные зависимости. Если обработка будет в компоненте то каждому созданному компоненту придется передавать зависимости при создании(или переиспользовании). Так же каждая система может одновременно обрабатывать несколько компонентов одной сущности, к примеру элементарный рендер, что бы система могла что-то отрисовать ей необходимы координаты сущности и ее текущий спрайт для отрисовки. Координаты, к примеру, у нас в TransformComponent, а спрайт в SpriteComponent. Вы можете спросить «А почему бы не объединить координаты и спрайт в один объект?», потому что спрайт нужен чаще всего только в системе отрисовки, а координаты, к примеру, еще в системе перемещения(для их обновления в соответствии с скоростью движения).
Sign up to leave a comment.

Articles