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

Zay-ES урок для начинающих

Опубликованно: 29.07.2017, 0:36
Последняя редакция, Andry: 30.07.2017 18:54

В этой статье мы объясним первые шаги, как работать с Zay-ES и то, что вы должны знать об этом.

Если вы являетесь новичком в Системах Сущностей, то сначала ознакомьтесь с Система Сущностей Введение.

Пример кода

import com.simsilica.es.Entity;
import com.simsilica.es.EntityData;
import com.simsilica.es.EntityId;
import com.simsilica.es.base.DefaultEntityData;

public class Main {

    public static void main(String[] args) {

        //Создадим EntityData
        EntityData entityData = new DefaultEntityData();

        //Создадим новый EntityId, id управляет объектами для предотвращения проблем
        EntityId entityId = entityData.createEntity();
        //Новый TestComponent добавляем Сущности
        entityData.setComponent(entityId, new TestComponent("Hello World"));

        //Получим новый объект Сущность с TestComponent
        Entity entity = entityData.getEntity(entityId, TestComponent.class);
        //Получим Component и отобразим значение
        TestComponent testComponent = entity.get(TestComponent.class);
        System.out.println(testComponent.getValue());

        //Перезапишем имеющийся компонент
        entity.set(new TestComponent("New Value"));
        System.out.println(testComponent.getValue());

        //Удалим Сущность из Данных
        entityData.removeEntity(entity.getId());
    }
}

Описание примера

Создание класса Компонентов

Вы просто создаете компонент, реализуя интерфейс EntityComponent:

public class TestComponent implements EntityComponent {

    private String value;

    public TestComponent(String value)
    {
        this.value=value;
    }

    public String getValue()
    {
        return value;
    }
}

Но есть некоторые правила, которые вы должны учитывать: Компоненты имеют только конструктор и getter. Важно, чтобы вы хранили только чистые данные в компонентах, потому что иначе вы не будете знать где есть логика, и четкость дизайна этого подхода реализации программного обеспечения затеряется. Кроме того, у сущности может быть только один компонент того же класса.

Начинающие стремятся добавить к компоненту большие объекты, такие как spatial и геометрии. Это большая ошибка, потому что такие объекты содержат логику, а в компонентах нашего подхода должны быть только данные. Абстрактные на общем уровне или храните их полностью в системах.
Никогда не создавайте подклассы класса Компонента.

Инициализировать Систему Сущностей

 EntityData entityData = new DefaultEntityData();

EntityData является основным классом системы сущностей. Здесь хранятся все данные.

Как работает entityData:

Для каждого класса компонентов создается новый Hashmap, который содержит entityId как ключ и компонент как значение. Поэтому, если вам нужно знать все сущности, которые владеют компонентом определенного типа, система будет искать в этих Hashmaps требуемый entityId.

Создание Сущности и добавление к ней Компонентов

//Создадим новый EntityId, id управляет объектами для предотвращения проблем
EntityId entityId = entityData.createEntity();
//Новый TestComponent добавляем Сущности
entityData.setComponent(entityId, new TestComponent("Hello World"));

EntityId — это объекты, которые содержат длинное значение. Zay-ES использует эти объекты, чтобы пользователи не писали грязный код.

Каждый объект имеет уникальный идентификатор, который является довольно длинным. Идентификаторы не используются повторно, потому что, если бы это было, то они не были бы больше уникальными, что могло бы вызвать огромные проблемы.

Часто люди боятся, что у них закончатся Id: если вы будете создавать новую сущность каждую секунду, вам понадобится примерно 585 лет, прежде чем у вас закончатся id.

Класс Entity

//Получим новый объект Сущность с TestComponent
Entity entity = entityData.getEntity(entityId, TestComponent.class);
//Получим Component и отобразим значение
TestComponent testComponent = entity.get(TestComponent.class);
System.out.println(testComponent.getValue());

Если вы хотите работать с сущностями, EntityData может создавать объекты Entity. Эти объекты содержат все Компоненты интересующих вас классов. В этом примере это только TestComponent.class. Вы можете иметь несколько объектов Entity для одной и той же сущности.

Данные этих объектов Entity не будут обновляться, если другие классы изменят компоненты для этой сущности

Замена компонента

//Перезапишем имеющийся компонент
entity.set(new TestComponent("New Value"));
System.out.println(testComponent.getValue());

Удаление сущности

//Удалим Сущность из Данных
entityData.removeEntity(entity.getId());

Набор Сущностей(Entity Sets)

Самой важной особенностью Zay-ES являются Наборы Сущностей(Entity Set). Настоятельно рекомендуется прочитать урок по настройке Наборов Сущностей(Entity Set) после прочтения этой статьи.

Прочтите урок по Наборов Сущностей(Entity Set)

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

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

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