Я пишу игру, в которой управляемый мышью объект контроллера нажимает на объект игрока, чтобы он что-то сделал.
Существует 2 способа инициирования взаимодействия между мышью и игроком:
- Контроллер вызывает функцию игрока:
Контроллер прослушивает события мыши. Когда щелчок мыши происходит в любом месте на экране, контроллер выполняет поиск всех объектов в точке, по которой щелкнули. Если один из объектов является объектом игрока, и его свойство «clickable» имеет значение true, тогда вызовите его соответствующую функцию.
- Игрок вызывает функцию контроллера:
Игрок слушает события мыши. Когда щелчок мыши происходит на плеере, а собственное свойство "clickable" игрока имеет значение true, тогда вызовите соответствующую функцию контроллера.
Моя дилемма здесь в том, что первый вариант кажется более интуитивным с тем, как я представляю себе сценарий, происходящий в реальном мире, но второй вариант кажется более интуитивным при правильном объектно-ориентированном проектировании, поскольку он не требует изучения свойств другого объекта. , что в некоторой степени нарушает инкапсуляцию (контроллер должен заглянуть в плеер, чтобы прочесть его свойство «clickable»). Кроме того, второй вариант кажется встроенным в шаблон проектирования «Контроллер».
Это всегда борьба за меня - могу ли я бросить вызов правильному объектно-ориентированному дизайну (например, вариант 1) или я использую реализацию, которая кажется противоречащей действительности (например, вариант 2)?
Я надеюсь, что мне не хватает какого-то промежуточного положения.