Beshere
@Beshere
Разработчик

В каком классе писать логику столкновений двух объектов?

Проектирую простую аркаду. Летят снежинки, игрок их ловит варежкой. Соответственно есть три класса:

1. Снежинка
2. Варежка
3. Сцена

Нужно отловить момент, когда игрок поймает варежкой снежинку - простой коллижн детект. В каком классе это делать будет правильней с точки зрения ООП?

Варианты:

1. В сцене. Сцена знает, какие у ней снежинки летят, где варежка.
2. В варежке. Варежка же тут главное действующее лицо.
3. В снежинке. Снежинка же должна исчезнуть.
  • Вопрос задан
  • 583 просмотра
Решения вопроса 1
hack504
@hack504
Нигде. В парадигме ООП и снежинка и варежка и сцена - описывают только свое поведение методами и свойствами. Введите ещё одну абстракцию - мир(или физика), которая содержит все эти объекты и описывает поведение их взаимодействия.
Сцена детектит столкновение снежинкой и варяжкой - передает миру, а тот в свою очередь удаляет снежинку, запускает анимацию варяжке, запускает в сцене радостный звуковой щелчок.
Таким образом, если в дальнейшем реализовывать дополнение "Грачи прилетели", то легко реализуется логика столкновения варяжки и помета => помёт остается, варяжка замирает, в сцене грустный звук "ооу"
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 4
usdglander
@usdglander
Yipee-ki-yay
GreatRash, Владимир Проскурин, Ryabos,
Три ответа и все разные! :)))
Ответ написан
@GreatRash
Я бы писал в снежинке.

UPD: но точно не в сцене.
Ответ написан
@Ryabos
Снежинка, насколько я понял, просто падает. Если разместить логику здесь - будет лишняя зависимость между сущностями.
Варежка нужна для того, чтобы ловить снежинки. Подходящий кандидат.
Сцена отвечает за размещение варежки и снежинок. Если она будет обрабатывать еще и события, может получиться GOD object.
Ответ написан
Комментировать
SayMAN83
@SayMAN83
Работаю в IT
Как выше уже написали, должен быть класс под обработку анимации. Снежинки удалять не нужно, их можно просто делать невидимыми, а затем использовать снова. В сцене вам нужно лишь рисовать все объекты на экране и передавать объектам результаты расчётов по анимации. А точнее Передавать матрицу вида и отрисовывать так каждый объект. На сцене.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы