Модель реального мира или правильный мир ООП? Или оба? - PullRequest
8 голосов
/ 30 августа 2009

Я пишу игру, в которой управляемый мышью объект контроллера нажимает на объект игрока, чтобы он что-то сделал.

Существует 2 способа инициирования взаимодействия между мышью и игроком:

  • Контроллер вызывает функцию игрока:
    Контроллер прослушивает события мыши. Когда щелчок мыши происходит в любом месте на экране, контроллер выполняет поиск всех объектов в точке, по которой щелкнули. Если один из объектов является объектом игрока, и его свойство «clickable» имеет значение true, тогда вызовите его соответствующую функцию.
  • Игрок вызывает функцию контроллера:
    Игрок слушает события мыши. Когда щелчок мыши происходит на плеере, а собственное свойство "clickable" игрока имеет значение true, тогда вызовите соответствующую функцию контроллера.

Моя дилемма здесь в том, что первый вариант кажется более интуитивным с тем, как я представляю себе сценарий, происходящий в реальном мире, но второй вариант кажется более интуитивным при правильном объектно-ориентированном проектировании, поскольку он не требует изучения свойств другого объекта. , что в некоторой степени нарушает инкапсуляцию (контроллер должен заглянуть в плеер, чтобы прочесть его свойство «clickable»). Кроме того, второй вариант кажется встроенным в шаблон проектирования «Контроллер».

Это всегда борьба за меня - могу ли я бросить вызов правильному объектно-ориентированному дизайну (например, вариант 1) или я использую реализацию, которая кажется противоречащей действительности (например, вариант 2)?

Я надеюсь, что мне не хватает какого-то промежуточного положения.

Ответы [ 11 ]

1 голос
/ 30 августа 2009

Это часто приходит в предпочтение. Логический дизайн игр очень часто расходится с хорошим дизайном ООП. Я склоняюсь к тому, что имеет смысл в рамках игровой вселенной, но нет абсолютно правильного ответа на этот вопрос, и каждая отдельная проблема должна рассматриваться сама по себе.

Это похоже на спор о плюсах и минусах верблюжьей шкуры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...