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



Я смотрел на дизайн игрового движка (специально ориентированный на 2d-игровые движки, но также применимый к 3d-играм), и меня интересует некоторая информация о том, как это сделать. Я слышал, что многие двигатели в настоящее время переходят на компонентный дизайн, а не на традиционную иерархию глубоких объектов.



знаете ли вы о каких-либо хороших связях с информацией о том, как часто реализуются такие проекты? Я видел развивайте свою иерархию, но я не могу найти много больше с подробной информацией (большинство из них просто говорят "использовать компоненты, а не иерархию", но я обнаружил, что для переключения моего мышления между двумя моделями требуется немного усилий).



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

601   8  

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.

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

CBSE в играх веб-ссылки (сортировка по релевантности):

там, кажется, не хватает информации по этому вопросу. Я недавно реализовал эту систему, и я нашел действительно хороший 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

    Ничего не найдено.