EN
ruDimbo
ruDimbo
110 subscribers
goals
9 of 25 paid subscribers
Делаем игру на JS для Яндекс игр! (за 7 дней)
1 of 2

ECS - Архитектура динамических миров (free)

ECS архитектура позволяющая управлять комплексными структурами без экспоненциального повышения сложности поддержки и расширения проекта.
Но помимо банального удобства мы получаем следущее:
     - быстрое ядро, в связи с тем что структура ECS это обычный массив то мы можем эффективно использовать память процессора (да, именно его)
     - при правильно построенной работе с этим ядром, мы снижаем влияние сборщика мусора. Сборщик довольно прожорлив к ресурсам, лучше бы его не будить.
     - отделение логики от данных
     - отказоустойчивость
     - гибкость, мы можем легко добавлять и удалять свойства Entity и не "ломать" код
     - сумасшедшие возможности оптимизации
Готовая реализация (рабочий код) находится тут - https://boosty.to/rudimbo/posts/89d9e285-c5df-4166-84e9-f998fdab97d4
Советы по использованию:
     - не добавляйте методы в компоненты
     - не мутируйте данные, если в компоненте position свойство X = 0 (number) следите чтобы тип данных оставался прежним.
     - используйте быстрые методы перебора массивов (for)
     - оптимизируйте методы перебора. Где-то нужно пробежать по всем объектам, где-то только найти нужный или несколько и остановиться
     - старайтесь избегать вложенных for / foreach
     - не удаляйте entity из середины массива, либо пометьте как null либо сместите на последний индекс, после чего удаляйте.
Как создать ECS структуру?
Первым делом необходимо определить контейнер в котором будут находиться наши сущности (entity), это может быть массив или объект.
Этот контейнер обычно называют World и должен иметь функционал работы с сущностями, добавление, поиск, удаление, работа с компонентами, прикрепление их к сущности, удаление из сущностей.
Далее делаем сущность, она по сути является простым объектом с полями - id, components.
Итак компонент, основной двигатель ECS.
Делаем маленький, изолированный объект (ака класс) с названием характеризующим данные которые в нем будут лежать.
Помним что компонент ничего не умеет! Это чистые данные, как корзина для мусора.
Последнее звено в цепи ECS - система.
Логический блок, вот тут мы можем оторваться и написать логику игры.
Здесь можно почти всё! Бегаем по сущностям, изменяем данные в их компонентах, сравниваем перетасовываем, удаляем и т.д.
Поздравляю! Теперь вы знаете как создать ECS архитектуру для игры.
Моя реализация ECS (рабочий код) находится тут - https://boosty.to/rudimbo/posts/89d9e285-c5df-4166-84e9-f998fdab97d4

Subscription levels

Воу Воу [1 lvl]

$ 2,25 per month
- Все виды статей
+ chat

Брат(сестренка) спокойно! [2 lvl]

$ 3,4 per month
Вы получите:
- Все виды статей
- Доступ к ранним версиям проектов
+ chat

Охохо тииииха! [3 lvl]

$ 5,7 per month
Вы получите:
- Все виды статей
- Доступ к ранним версиям проектов
- Доступ к базе кода (статьи с кодом)
+ chat

Родной(ая) ты шо! [4 lvl]

$ 11,3 per month
Вы получите:
- Все виды статей
- Доступ к ранним версиям проектов
- Доступ к базе кода (статьи с кодом)
- Доступ к ассетам (арты, звуки)
+ chat

АааААаААаА Тука! [5 lvl]

$ 113 per month
Вы получите:
- Все виды статей
- Доступ к ранним версиям проектов
- Доступ к базе кода (статьи с кодом)
- Доступ к ассетам (арты, звуки)
- Не человеческая благодарочка от Деда ;)
+ chat

Ахахаха, а шо? [6 lvl]

$ 1 127 per month
Вы получите:
- Поздравляю, вы инвестировали в Деда
P.s. на случай если хочешь увидеть сурвач (игру мечты) от Димбыча
+ chat
Go up