#1 19.04.13 20:36
[C++] Как устроить взаимодействие объектов в игре?
Приветствую!
Не спеша собираю свой велосипед - простенькую 2d игрулю.
Логику выбрал следующую: Имеется базовый класс "Объект", на базе которого строятся все объекты игры.
Встал вопрос о том как правильно описывать взаимодействия всех объектов.
Сейчас есть такая идея: в классе "Объект" создать функцию "ВозвратитьТип()" и виртуальную функцию "Взаимодействие(Объект *pОбъект)".
Первая функция реализуется в наследуемом классе и возвращает условный тип объекта ( трава, камень, забор, взрыв ).
Вторая функция реализует взаимодействие объектов согласно полученному типу объекта pОбъект.
Все бы ничего, но меня настораживает что если я захочу добавить пару новых объектов, мне придется дописывать функцию Взаимодействия для всех типов объектов.
Есть ли более изящный вариант?
Offline
#2 19.04.13 22:33
Re: [C++] Как устроить взаимодействие объектов в игре?
у объектов должен быть дирижер. он должен по логике ими управлять. дирижерами должен управлять другой дирижер. и так наверх. трава не должна как то влиять на камень, а камень не должен "двигать" забор. ими должен управлять, скажем, менеджер аллеи.
взаимодействий же может стать много. больше одного. тогда придется писать прослойки между камнем и сараем...
Offline
#3 19.04.13 23:20
Re: [C++] Как устроить взаимодействие объектов в игре?
Правильно ли я понял: Создаем класс "Дирижер", описываем метод "Взаимодействие(Объект *pO1, Объект *pO2)", в котором описываются взаимодействия всех объектов?
т.о. при добавлении новых объектов, изменения терпит только данный метод?
Offline
#10 26.04.13 11:55
Re: [C++] Как устроить взаимодействие объектов в игре?
Вы сначала не пытайтесь найти паттерны, которые хотите использовать.
Сначала выделите use cases, участников и способы взаимодействия среди них.
Начните реализовывать простейшее взаимодействие, на базе принципов. А не на основе паттернов.
В процессе, вы должны столкнуться с тем, что у вас появится дублирующий код, плюс где то необходимо иметь возможность для изменения поведения в рантайме и в deployment-тайме, и все это на основании принципов проектирования, приведет к существующим паттернам.
Пытаться выделить паттерны и на их основе сделать какую то реализацию - самая главная ошибка новичков.
Offline

