2016-05-24 5 views
0

В игровом движке, основанном на компонентах, у меня проблемы с отношением между игровыми объектами/компонентами.Компонентный игровой движок: как управлять отношением между игровым объектом?

Где хранить отношения и как их удалить?

Чтобы это было просто, вот пример.

Gradius-клон Игра состоит из 2-х типов объектов игры: -

  1. Rocket = Main Body Component + турель Компонент
  2. Плавающий турель = Turret компонент (одна)

Деталь компонента: -

  1. Основного корпус Компонент = один физическое тело + один графическое тело
  2. турель Компонент = один физическое тело + один графическое тело

турель Компонент разработан, чтобы иметь отношения (физическое ограничение или право собственности) с Компонент основного корпуса.

Существует требование о том, что отношение должно быть удалено перед оба компонентой.

  • Например, отношение в этом случае также содержит физическое ограничение, реализованное внешней физиологической библиотекой, например. Физика пули.

Это довольно пример конкретного описания, если только в случае ....

шаги, чтобы удалить Rocket должны быть в таком порядке: -

  1. удалить ограничение
  2. удалить Main Body Co mponent и турель Компонент (любой заказ одобрен)

отношение также должны быть удалены, когда Main Body Компонент удаляется, оставляя Turret компонент в одиночку, так пусть он станет Плавающая башня.

Где должен отношение храниться? (Все, кажется, хорошо, но отношение к следующему вопросу.)

  1. внутри нового компонента в новом выделенном игровом объекте (новое лицо)
  2. внутри нового компонента в одной и той же сущности, как Rocket
  3. внутри новой системы менеджера соблюдающего списка этого конкретного вида связи

Как следует отношение будут удалены? (И, кажется, плохие идеи.)

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

  2. назовём новую специальную систему, когда она хочет, чтобы удалить Main Body Component или Rocket

я ожидал ответы на общих случаях, когда имеется много типов связи , (между игровыми объектами или компонентами)

Редактировать 1: Предлагаемое решение о создании права собственности и добавлении кода в деструктор Rocket прямо противоположно дизайну на основе компонентов.

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

ответ

0

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

EDIT: Если вы не хотите, чтобы объекты или компоненты, чтобы иметь какие-либо знания их собственности или отношения, я думаю, что лучшим выбором будет держать список (как вы предложили) в отношении с ссылка на владельца отношения. Таким образом, вы можете сначала проверить список, посмотреть, может ли быть удален ваш игровой объект (Rocket), или если у него есть какие-либо отношения/s для удаления в первую очередь.

+0

Спасибо, но я боюсь, что это разрушит модульность. В этот вопрос вносится дополнительная обратная связь. – javaLover

 Смежные вопросы

  • Нет связанных вопросов^_^