Компонентный дизайн игрового движка [закрыто]
Я смотрел на дизайн игрового движка (специально ориентированный на 2d-игровые движки, но также применимый к 3d-играм), и меня интересует некоторая информация о том, как это сделать. Я слышал, что многие двигатели в настоящее время переходят на компонентный дизайн, а не на традиционную иерархию глубоких объектов.
знаете ли вы о каких-либо хороших связях с информацией о том, как часто реализуются такие проекты? Я видел развивайте свою иерархию, но я не могу найти много больше с подробной информацией (большинство из них просто говорят "использовать компоненты, а не иерархию", но я обнаружил, что для переключения моего мышления между двумя моделями требуется немного усилий).
любые хорошие ссылки или информация об этом будут оценены, и даже книги, хотя ссылки и подробные ответы здесь были бы предпочтительны.
8 ответов:
2013-01-07 обновление:Если вы хотите увидеть хорошее сочетание компонентного игрового движка с (на мой взгляд) превосходным подходом реактивного программирования, взгляните на V-Play engine. Он очень хорошо интегрирует QTs привязка свойств QML функциональность.
мы провели некоторые исследования по CBSE в играх в нашем университете, и я собрал некоторые материалы за эти годы:
корпоративные игры литература:
- Архитектура Игрового Движка
- Программирование игр драгоценные камни 4: Система для Managin игровые сущности игры
- Game Programming Gems 5: Управление Объектами На Основе Компонентов
- Game Programming Gems 5: A Generic Component Library
- Game Programming Gems 6: Game Object Component System
- Разработка Объектно-Ориентированных Игр
- Architektur des Kerns einer Game-Engine und Implementierung mit Java (немецкий)
очень хорошим и чистым примером компонентного игрового движка в C# является Elephant Game framework.
Если вы действительно хотите знать, какие компоненты читаются: разработка программного обеспечения на основе компонентов! Они определяют компонент как:
A компонент программного обеспечения это программный элемент, который соответствует компонентной модели и может быть независимо развернут и составлен без изменений согласно стандарту состава.
A компонентная модельопределяет специфическое взаимодействие и стандартами состава. А реализация компонентной модели выделенный набор исполняемых программных элементов, необходимых для поддержки выполнения компонентов, соответствующих модели.
A инфраструктура программных компонентов - это набор взаимодействующих компонентов программного обеспечения, разработанного, чтобы гарантировать, что программное обеспечение система или подсистема, построенная с использованием этих компонентов и интерфейсов, будет удовлетворять четко определенным спецификациям производительности.
мои мнения после 2 лет опыта С CBSE в играх считается, что объектно-ориентированное программирование-это просто тупик. Помните мое предупреждение, когда вы смотрите, как ваши компоненты становятся все меньше и меньше, и больше похожи на функции, упакованные в компоненты с большим количеством бесполезных накладных расходов. Используйте функционально-реактивного Программирование вместо. Также взгляните на мой свежий пост в блоге (который приводит меня к этому вопросу при написании его :)) о почему я переключился с компонентной архитектуры игрового движка на FRP.
в играх корпоративные документы:
- Разработка игр на основе компонентов-решение для увеличения затрат и расширения сроков?
Гибкая И Расширяемая Архитектура Для Компьютера Игры(404)- архитектура программного обеспечения для игр
- Общая Структура Для Разработки Игр (WebArchive)
- Интеллектуальная Композиция Игровых Объектов С Использованием Инъекции Зависимостей
CBSE в играх веб-ссылки (сортировка по релевантности):
компонент на основе вики-объекты(пусто Вики)- развиваться Ваша Иерархия
- структура игрового объекта: наследование и агрегация
- управляемая данными система объектов игры (PDF)
- основанная на данных игровых объектов системы (ППТ)
- инструмент прототипирования на основе компонентов для flash
теория и практика архитектуры компонентов игровых объектов(404)- сущность Системы-это будущее ММО
- ogre3d.org форум: объекты на основе компонентов
- gamedev.net: архитектура внешней компонентной системы сущностей
- gamedev.net: вопрос о системе сущностей
- Brainfold entity-system blog (WebArchive)
там, кажется, не хватает информации по этому вопросу. Я недавно реализовал эту систему, и я нашел действительно хороший GDC Powerpoint, который объяснил детали, которые часто оставляют позади довольно хорошо. Этот документ находится здесь:теория и практика архитектуры компонентов игровых объектов
в дополнение к этому Powerpoint, есть некоторые хорошие ресурсы и различных блогах. PurplePwny имеет хорошую дискуссию и ссылки на некоторые другие ресурсы. Уродливые Детские Студии немного дискуссии вокруг идеи о том, как компоненты взаимодействуют друг с другом. Удачи вам!
хотя и не полный учебник по теме дизайна игрового движка, я обнаружил, что на этой странице имеет некоторые хорошие детали и примеры по использованию архитектуры компонентов для игр.
Он с открытым исходным кодом и доступен по адресу http://codeplex.com/elephant
кто-то сделал рабочий пример gpg6-кода, Вы можете найти его здесь:http://www.unseen-academy.de/componentSystem.html
или здесь: http://www.mcshaffry.com/GameCode/thread.php?threadid=732
в отношении
в настоящее время я исследую эту точную тему во многих (многих) потоках по адресу GameDev.net и нашел следующие два решения, чтобы быть хорошими кандидатами на то, что я буду разрабатывать для своей игры:
Я исследовал и реализовал этот последний семестр для курса разработки игр. Надеюсь, этот пример кода может указать вам в правильном направлении, как вы можете подойти к этому.
class Entity { public: Entity(const unsigned int id, const std::string& enttype); ~Entity(); //Component Interface const Component* GetComponent(const std::string& family) const; void SetComponent(Component* newComp); void RemoveComponent(const std::string& family); void ClearComponents(); //Property Interface bool HasProperty(const std::string& propName) const; template<class T> T& GetPropertyDataPtr(const std::string& propName); template<class T> const T& GetPropertyDataPtr(const std::string& propName) const; //Entity Interface const unsigned int GetID() const; void Update(float dt); private: void RemoveProperty(const std::string& propName); void ClearProperties(); template<class T> void AddProperty(const std::string& propName); template<class T> Property<T>* GetProperty(const std::string& propName); template<class T> const Property<T>* GetProperty(const std::string& propName) const; unsigned int m_Id; std::map<const string, IProperty*> m_Properties; std::map<const string, Component*> m_Components; };компоненты определяют поведение и работают со свойствами. Свойства совместно используются всеми компонентами ПО ССЫЛКЕ и получают обновления бесплатно. Это означает отсутствие больших накладных расходов для передачи сообщений. Если есть какие-то вопросы, я постараюсь ответить как можно лучше.
в этом контексте компоненты для меня звучат как изолированные части времени выполнения двигателя, которые могут выполняться одновременно с другими компонентами. Если это мотивация, то вы можете посмотреть на актер модель и системы, которые используют его.
интересный анализ возможных осложнений...
Я быстро охотился на google и ничего не нашел, но вы можете проверить некоторые комментарии - многие люди, похоже, пытались реализовать простую демонстрацию компонентов, вы можете взглянуть на некоторые из них для вдохновения:
http://www.unseen-academy.de/componentSystem.html
http://www.mcshaffry.com/GameCode/thread.php?threadid=732
http://www.codeplex.com/Wikipage?ProjectName=elephantкроме того, сами комментарии, похоже, имеют довольно глубокое обсуждение того, как вы можете закодировать такую систему.
Comments