Компонентная архитектура в разработке игр - PullRequest
3 голосов
/ 02 октября 2011

Я думал попробовать компонентную архитектуру для разработки игр. Я прочитал некоторые сообщения в блоге и статьи об этом, но у меня есть несколько вещей, которые я еще не разобрался. Когда я говорю «на основе компонентов», я имею в виду, что вы можете добавлять компоненты в ComponentManager, который обновляет все компоненты в его списке. Я хочу попробовать это, чтобы избежать получения классов, которые наследуют переменные и функции, которые им не нужны. Мне очень нравится идея иметь действительно простой класс сущностей с множеством компонентов, работающих бок о бок, не раздутый. Кроме того, легко удалить и добавить функциональность во время выполнения, что делает его действительно крутым.

Это то, к чему я стремлюсь.

// this is what the setup could be like
entity.componentManager.add(new RigidBody(3.0, 12.0));
entity.componentManager.add(new CrazyMagneticForce(3.0));
entity.componentManager.add(new DrunkAffection(42.0, 3.0));

// the game loop updates the component manager which updates all components
entity.componentManager.update(deltaTime);

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

Я не могу полагаться на то, что компоненты являются самодостаточными. Когда-нибудь им нужно будет общаться с другими компонентами. Как мне это решить? В Unity 3D вы можете получить доступ к компонентам, используя GetComponent().

Я думал о том, чтобы сделать это так, но что произойдет, если у вас есть два компонента одного типа? Может быть, вы вернете Вектор.

var someComponent : RigidBody = _componentManager.getComponent(RigidBody);

Приоритет: некоторые компоненты необходимо обновить раньше других

Некоторые компоненты необходимо обновить раньше других, чтобы получить правильные данные для текущего игрового цикла. Я думаю о добавлении приоритета к каждому компоненту, но я не уверен, что этого достаточно. Unity использует LateUpdate и Update, но, возможно, есть способ получить еще лучший контроль над порядком выполнения.

Ну вот и все. Если у вас есть какие-либо мысли, не стесняйтесь оставить комментарий. Или, если у вас есть хорошие статьи или блоги об этом, я с удовольствием их посмотрю. Спасибо.

Компонентный дизайн игрового движка

http://cowboyprogramming.com/2007/01/05/evolve-your-heirachy/


EDIT: Мой вопрос - как решить проблему с приоритетами и связью между компонентами.

1 Ответ

3 голосов
/ 03 октября 2011

Я согласился на систему компонентов RDMBS http://entity -systems.wikidot.com / rdbms-with-code-in-systems # objc

Пока все работает очень хорошо. Каждый компонент содержит только данные и не имеет методов. Тогда у меня есть подсистемы, которые обрабатывают компоненты и выполняют фактическую работу. Иногда подсистеме нужно общаться с другой, и для этого я использую шаблон локатора службы http://gameprogrammingpatterns.com/service-locator.html

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...