Докуметация Cтарт Статьи Форум Лента Вход
Не официальное русскоязычное сообщество
Главная
    Документация jMonkeyEngine
        jMonkeyEngine Уроки и Документация
            Вклады
                Система Сущностей Zay-ES
                    Zay-ES wiki

Zay-ES wiki

Опубликованно: 09.01.2019, 16:54
Последняя редакция, Andry: 10.01.2019 21:13

Добро пожаловать в вики Zay-ES!

Чтобы впервые начать работу с Zay-ES, сначала посмотрите страницу С Чего Начать.

Для более глубокого понимания здесь есть раздел документации: Документация.

Или взгляните на некоторые примеры в разделе Примеры из практики Zay Es.

Для дальнейшего чтения на Entity-Component-Systems проверьте раздел Интересные ссылки.

оригинал


О Christian Liesch

Меня зовут Christian Liesch, и я далёк от обычных программистов игр и занимаюсь этим как хобби, в дождливую погоду и в бурные ночи.

Мне слишком часто приходилось перебарывал себя что бы завершить даже простые игры. Но потом я увидел эту систему сущностей где-то в вики jME3. Сначала я понятия не имел, как это должно быть встроено в игру, и как вы отображаете свои игровые элементы на экране. Поэтому я изучил asteroid panic от Paul Speed и начал понимать. Система сущностей вернула меня в прошло в день взлома ZX81 когда я был 13-летним мальчиком более 30 лет назад. Я нашел способ четко разделить логику, данные и представление. С помощью системы сущностей я смог написать простую игру менее чем за 24 часа, что потребовало бы от меня недели и месяцы классическим способом. Потому что система сущностей дала мне структуру, которую я так отчаянно искал. Простая архитектура, с «модулями», где все ясно чётко, и не надо задумываться о наследовании, а объединяют все это, только сущности, компоненты и системы.

Моё тематическое исследование — это моя первая игра на основе системы сущностей, которую я написал для вас. Я многому научился и хочу поделиться с вами своими выводами и извлеченными уроками. В игре Invaders(Захватчики). Тематическое исследование основанное на идее, что в итоге у вас будет простая запущенная игра, и даже больше, вы можете попробовать все шаги и получить немедленную обратную связь.

оригинал


Документация

Когда нибудь возможно здесь что то будет.

Эмпирические правила

Обдумывание концепции Сущность-Компонент-Система(Entity-Component-System) может быть затруднено. Многолетний опыт объектно-ориентированного программирования может затруднить мышление в новом режиме. Ниже приведены некоторые общие правила, которые следует учитывать при разработке собственного приложения ECS дизайна:

  • Компоненты только данные.
  • Две системы не должны производить один и тот же тип компонента для одних и тех же сущностей.
  • это еще не всё

API Javadoc

Всегда стоит ознакомиться с javadocs проекта и держать эти ссылки под рукой:

Документация по API генерируется как часть последнего выпуска Zay-ES и может содержать более актуальную и точную информацию, чем эти страницы документации.

оригинал


С Чего Начать


Получение библиотеки

Загрузите последнюю версию ядра (и/или сети) отсюда: Релизы

Или сконфигурируйте ваш инструмент сборки так, чтобы они автоматически вытягивались (gradle/maven/итп.). Jar-ы Zay-ES доступны в открытом репозитории jcenter.

Вот пример раздела из файла build.gradle, который включает в себя как ядро Zay-ES, так и сетевую библиотеку:

dependencies {
    compile "com.simsilica:zay-es:1.2.1"
    compile "com.simsilica:zay-es-net:1.2.1"
}

Требуемые зависимости

Если вы не используете современный инструмент для сборки, который автоматически разбирается с зависимостями, то тогда вам понадобится скачать несколько дополнительных jar-файлов:

  1. Guava версия 12 или новее
  2. slf4j версии 1.7.5 или новее, а также адаптер для предпочитаемой вами среды ведения журнала отладки. (Как минимум, вам понадобится API jar, что-то вроде: slf4j-api-1.7.5.jar)

Создайте главный объект EntityData

EntityData — это главный класс, который будет содержать все компоненты. Создать базовую версию «в памяти» так же просто, как:

    EntityData ed = new DefaultEntityData();

Создать Сущность

Создание сущности это просто генерация нового EntityId, к которому могут быть присоединены компоненты.

    EntityId myEntity = ed.createEntity();

Задание Компонент

Обычно приложение создает свои собственные классы реализации EntityComponent, но Zay-ES поставляется с парой стандартных. Следующий код иллюстрирует задание названия ранее созданному объекту.

    ed.setComponent(new Name("My Entity"));

Наблюдение за изменениями (игровой цикл)

Одно из основных отличий между Zay-ES и другими системами ECS заключается в том, что вас не принуждают к конкретной «системной» модели. То, как вы пишете свои системы и как вы используете сущности, более или менее зависит от вас. Таким образом, вместо подхода Инверсии управления, в котором вы реализуете какой-то системный класс и фреймворк вызывается вами, вы можете просто запрашивать нужные сущности, когда захотите. Zay-ES предоставляет внутренние механизмы, чтобы сделать это эффективным.

Основной цикл опроса:

    EntitySet namedEntities = ed.getEntities(Name.class);
    while( true ) {
        namedEntities.applyChanges();
        for( Entity e : namedEntities ) {
            // делать что то каждый кадр
        }
    }

Более эффективный цикл опроса, где код запускается только при изменении сущностей:

    EntitySet namedEntities = ed.getEntities(Name.class);
    while( true ) {
        if( namedEntities.applyChanges() ) {
            // сделать что-то с новыми соответствующими объектами
            addSomeStuff(namedEntities.getAddedEntities());

            // сделать что-то с сущностями, которые больше не соответствуют
            removeSomeStuff(namedEntities.getRemovedEntities());

            // сделать что-то с сущностями, которые просто изменились
            changeSomeStuff(namedEntities.getChangedEntities());
        }
    }

Для дальнейшего чтения смотрите:

оригинал


Zay-ES Case Studies

Сначала вы должны загрузить JME 3.1+ и заставить его работать, это довольно просто. Далее скачиваем также Zay ES и его зависимости guava и slf4j-api. После этого запустите новый игровой проект в JME, выполнив следующие действия: Создать проект ▸ JME3 ▸ BasicGame

Jar-ы могут быть добавлены с помощью: Щелкните [ПК мыши] ваш проект Свойства ▸ Библиотеки ▸ Добавить файл JAR/папку. Вы можете разместить их там, где захотите, лично у меня они находятся в папке lib в моем проекте JME3.

Автор этих тематических исследований Christian Liesch.

Invaders(Захватчики)

Простой игровой сервер

  • Мой первый игровой сервер
  • Мой первый игровой клиент

оригинал


Интересные ссылки

Этот раздел для интересных ссылок, связанных с Системами Сущностей(Entity Systems).

Мое первоначальное знакомство с ESes было в серии статей в блоге на сайте t-machines … сейчас они, по-видимому, уже не существуют, но некоторые основные оригинальные материалы можно найти в этих трех статьях:

оригинал


Переведено для jmonkeyengine.ru
Автор перевода: Andry

Добавить комментарий

jMonkeyEngine.ru © 2017. Все права сохранены.