В игровом движке, основанном на компонентах, у меня проблемы с отношением между игровыми объектами/компонентами.Компонентный игровой движок: как управлять отношением между игровым объектом?
Где хранить отношения и как их удалить?
Чтобы это было просто, вот пример.
Gradius-клон Игра состоит из 2-х типов объектов игры: -
- Rocket = Main Body Component + турель Компонент
- Плавающий турель = Turret компонент (одна)
Деталь компонента: -
- Основного корпус Компонент = один физическое тело + один графическое тело
- турель Компонент = один физическое тело + один графическое тело
турель Компонент разработан, чтобы иметь отношения (физическое ограничение или право собственности) с Компонент основного корпуса.
Существует требование о том, что отношение должно быть удалено перед оба компонентой.
- Например, отношение в этом случае также содержит физическое ограничение, реализованное внешней физиологической библиотекой, например. Физика пули.
Это довольно пример конкретного описания, если только в случае ....
шаги, чтобы удалить Rocket должны быть в таком порядке: -
- удалить ограничение
- удалить Main Body Co mponent и турель Компонент (любой заказ одобрен)
отношение также должны быть удалены, когда Main Body Компонент удаляется, оставляя Turret компонент в одиночку, так пусть он станет Плавающая башня.
Где должен отношение храниться? (Все, кажется, хорошо, но отношение к следующему вопросу.)
- внутри нового компонента в новом выделенном игровом объекте (новое лицо)
- внутри нового компонента в одной и той же сущности, как Rocket
- внутри новой системы менеджера соблюдающего списка этого конкретного вида связи
Как следует отношение будут удалены? (И, кажется, плохие идеи.)
создать флаг для проверки на предстоящем исключении главного органа компонента или Ракетно, а затем вызвать новую специализированную систему, чтобы удалить связь непосредственно перед удалить другие компоненты , он должен вызываться перед другими диспетчерскими системами каждый раз. другой существующий менеджер
назовём новую специальную систему, когда она хочет, чтобы удалить Main Body Component или Rocket
я ожидал ответы на общих случаях, когда имеется много типов связи , (между игровыми объектами или компонентами)
Редактировать 1: Предлагаемое решение о создании права собственности и добавлении кода в деструктор Rocket прямо противоположно дизайну на основе компонентов.
- Он сделает три компонента (включая ограничение) очень парами.
- Кроме того, компоненты не должны иметь нетривиальной функции.
Я считаю, что деструктор - один из них, которого следует избегать.
(я когда-то есть вздутие живота деструктор некоторых объектов, уничтожить все хорошее модульность.)
Спасибо, но я боюсь, что это разрушит модульность. В этот вопрос вносится дополнительная обратная связь. – javaLover