Задав два вопроса о системах сущностей ( 1 , 2 ) и прочитав некоторые статьи о них, я думаю, что понимаю их гораздо лучше, чем раньше. У меня все еще есть некоторые неопределенности, в основном в отношении создания эмиттера частиц, системы ввода и камеры. У меня, очевидно, все еще есть некоторые проблемы с пониманием систем сущностей, и они могут относиться к целому ряду объектов, но я выбрал эти три, потому что они представляют собой очень разные понятия, должны охватывать довольно широкий круг вопросов и помочь мне понять системы сущностей и как справляюсь с такими проблемами, как я сам, по мере их появления.
Я создаю движок на JavaScript, и я реализовал большинство основных функций, которые включают в себя: обработку ввода, гибкую систему анимации, эмиттер частиц, математические классы и функции, обработку сцены, камеру и рендер, и целую кучу других вещей, которые обычно поддерживают двигатели. Я прочитал ответ Byte56, который заинтересовал меня в превращении движка в систему сущностей. Он по-прежнему останется игровым движком HTML5 с базовой философией сцены, но он должен поддерживать динамическое создание объектов из компонентов.
Теперь у меня проблема в том, чтобы вписать мою старую концепцию движка в эту новую парадигму программирования. Вот некоторые определения из предыдущих вопросов, обновленные:
Сущность является идентификатором. У него нет никаких данных, это не объект, это простой идентификатор, который представляет индекс в списке сцен всех сущностей (который я на самом деле планирую реализовать в виде матрицы компонентов).
Компонент является держателем данных, но с помощью методов , которые могут работать с этими данными. Лучший пример -
Vector2D
компонент «Позиция». Он имеет данные:x
иy
, а также некоторые методы , которые делают работающие на данных немного проще:add()
,normalize()
и так далее.Системы является то , что может работать на множестве субъектов, отвечающих определенным требованиям; как правило, сущности должны иметь определенный набор компонентов для работы. Система является частью «логики», частью «алгоритма», все функциональные возможности, предоставляемые компонентами, предназначены исключительно для упрощения управления данными.
камера
Камера имеет Vector2D
свойство положения, свойство поворота и некоторые методы для центрирования ее вокруг точки. Каждый кадр, он подается на рендерер вместе со сценой, и все объекты переводятся в соответствии с его положением. Сцена затем отображается.
Как я мог представить этот вид объекта в системе сущностей? Будет ли камера объектом, компонентом или комбинацией (согласно моему ответу )?
Излучатель частиц
Проблема с моим эмиттером частиц, опять же, то, что должно быть чем. Я почти уверен, что частицы сами по себе не должны быть сущностями, поскольку я хочу поддерживать более 10 000 из них, и я считаю, что создание такого количества сущностей нанесло бы серьезный удар по моей производительности.
Как я мог представить этот вид объекта в системе сущностей?
Менеджер ввода
Последнее, о чем я хочу поговорить, - как обрабатывать ввод. В моей текущей версии движка есть класс с именем Input
. Это обработчик, который подписывается на события браузера, такие как нажатия клавиш и изменения положения мыши, а также поддерживает внутреннее состояние. Затем у класса проигрывателя есть react()
метод, который принимает входной объект в качестве аргумента. Преимущество этого состоит в том, что входной объект может быть сериализован в .JSON, а затем распространен по сети, что обеспечивает плавное многопользовательское моделирование.
Как это переводится в систему сущностей?