Znak - перенос 2D движка на Nimlang
Golang
всем неплох, пока не потребуется работать с C/C++
-библиотеками и компиляцией под wasm. В результате Znak
был портирован на Nimlang
.
Golang
всем неплох, пока не потребуется работать с C/C++
-библиотеками и компиляцией под wasm. В результате Znak
был портирован на Nimlang
.
С момента первого релиза LeoECS Proto
прошло уже два года - он продолжает развиваться и меняться благодаря обратной связи от подписчиков. Фреймворк показывает неплохие результаты в области, под которую он разрабатывался - быстрые и массовые структурные изменения мира (создание и удаление сущностей, добавление и удаление компонентов на них каждый кадр).
Давно не было новостей, пора исправить этот недочет. Последний месяц занимался написанием простейшего 2D-движка, способного работать как на десктопе (win
/mac
), так и в вебе (webgl2-wasm
), похожего по своей структуре и апи на Unity, собирающийся за секунды в относительно небольшой размер, выдающий неплохую скорость рендера и с кодовой базой движка и пользовательского на одном языке.
Golang
- прекрасный язык для backend-а с низким порогом входа и простым синтаксисом, основы которого изучаются за неделю экспериментов. Но у него есть один серьезный недостаток - плохое взаимодействие с c/c++ кодом в плане быстродействия или вообще невозможность в случае определенных целевых платформ (web/wasm). Для клиентской части с рендером графики и поддержкой разных платформ придется подыскать что-то другое. Хорошей альтернативой может стать Vlang
.
Во всей линейке LeoECS
(Classic, Lite, Proto) есть одна особенность - сущности автоматически уничтожаются при удалении последнего присоединенного к ним компонента. При этом сущности изначально создаются пустыми с последующим добавлением на них компонентов - это создает ситуацию, когда из-за ошибки в коде мы можем забыть добавить компоненты и сущность останется пустой. В результате сущность выйдет из-под контроля, что приведет к утечке памяти.
Иногда бывает нужно организовывать связь сущностей в виде Родитель-Ребенок
, когда при удалении Родителя
все его Дети
автоматически удаляются, либо еще как-то реагируют на это событие. Так же необходимо быстро узнавать Родителя
у сущности и наоборот - список всех Детей
. Теперь в LeoECS Proto
для решения этой задачи есть готовый модуль.
ECS
данные обычно рассматриваются как “база данных”, записи в которой не имеют четкого порядка. Но что если этот порядок необходим, например, для отрисовки пользовательского интерфейса?ECS
данных может быть очень много, но что если количество сущностей не превышает десятка тысяч, количество компонентов - нескольких тысяч, а надо запускаться в ограниченном по ресурсам окружении типа web-браузера?
Последние доработки LeoECS Proto
были направлены на решение этих двух проблем.
LeoECS Proto
был портирован на Golang
, что позволит использовать его как на стороне сервера, так и в любом Golang
-движке (Ebitengine, G3N и т.п).
Тут вышла занимательная статья по сравнению двух фреймворков. Предлагаю расширить ее до четырех: LeoECS Lite, Morpeh, DragonECS и LeoECS Proto.