Я пишу легкий игровой движок, и, проводя некоторые исследования для него, я столкнулся с рядом убедительных статей, посвященных реализации объектов игры через модель «коллекция компонентов», а не «заблуждение от конкретных классов», модель. Есть много преимуществ:Как движок игры, который моделирует объекты как «коллекции компонентов», работает во время выполнения?
- объектов может быть составлен с использованием данных управляемых методами проектирования, позволяющими дизайнеров придумать новые объектов без привлечения программиста;
- там, как правило, меньше исходного файла зависимостей, позволяющих код скомпилирован быстрее;
- двигатель в целом становится больше обычный;
- непредвиденные последствия, связанные с необходимостью изменение классов бетона высоко вверх inheiritance иерархия может быть avoided;
- и так далее.
Но есть части системы, которые остаются непрозрачными. Прежде всего, это то, как компоненты одного и того же объекта общаются друг с другом. Например, предположим, что объект, который моделирует пулю в игре реализована в терминах этих компонентов:
- немного геометрии для визуального представления
- положение в мире
- объем используемых для столкновения с другими объектами
- другие вещи
время рендеринга геометрии должен знать свое место в мире, чтобы отобразить совместное правильно, но как он находит эту позицию среди всех своих родственных компонентов в объекте? А во время обновления, как объем столкновения находит позицию объекта в мире, чтобы проверить его пересечение с другими объектами?
Я думаю, мой вопрос может быть сведен к следующему: Хорошо, у нас есть объекты, которые состоят из нескольких компонентов, каждый из которых реализует немного функциональности. Каков наилучший способ для работы во время выполнения?
Это отличный вопрос, и, хотя я много читал эту тему, я хотел бы, чтобы кто-то опубликовал окончательный ответ! – Iain 2008-10-15 15:56:27
Я много читал об этом за последние несколько недель, в Game Programming Gems # 6 есть довольно хорошая статья об этом ... но нет хорошего примера времени выполнения. Мне все же хотелось бы знать, как вы можете управлять несколькими визуальными компонентами внутри Game Entity (для семейства визуальных игр, у вас может быть компонент Particle System, компонент оружия и компонент модели Character), и все эти компоненты внутри тот же игровой объект. Как вы можете управлять ими? – Goles 2009-11-29 21:31:30