Регистрация: Nov 2010
Сообщений: 497
|
У вас здесь точно не один объект и не один класс.
Модель - состояние "героя". Это те свойства вроде "защищен", "состояние" (идет в точку..., корчится, умер). Методы - только изменить соответствующие свойства. Возможно, выступает и в качестве прокси событий анимации для всего другого мира.
UI героя. Отдельный класс. Слушает модель героя. Изменяет анимацию. При необходимости через модель героя уведомляет о событиях анимации. Взаимодействует только с моделью героя!
Управлением занимается "игра". Она соответствующим образом меняет модель (не UI!). Возможно, прослушивает уведомления от UI через ту же модель. При этом в игре может быть выделен и HeroController, который занимается обслуживанием модели. Важно при этом то, что HeroController является не частью героя, а частью игры, получившейся в процессе ее (игры) декомпозиции. Контроллер героя взаимодействует с игрой (остальной частью, другими контроллерами) и моделью игрока. Обычно к "моделям" других объектов контроллер героя не обращается (иначе сложно найти, кто и что меняет).
Отдельно хочется отметить, что все вышеописанное не обязано быть одним классом. Каждый элемент может быть несколькими классами. Может вообще не иметь специальных классов (UI может собираться вызовом нескольких общих библиотечных методов, герой может быть просто набором отдельных "простых" полей, которые передаются по-отдельности).
Основной плюс модели - логика игры и логика отображения никак не смешиваются. Да, они зависят друг от друга, но не объединены. Поэтому изменения любой из двух частей проводить проще, чем в "смешанном" варианте. При этом "поведение" тоже разделено на части. Что-то является "общим", необходимым для анимации. А что-то является общей частью логики игры и обрабатывается именно в этой логике. Может, потом при укусе врага игрок будет "защищен", а не "корчится". В этом случае будет изменена игра или контроллер (их менять и так придется), все остальное будет работать автоматически и дальше. Ну а с учетом того, что код контроллера занимается только управлением состоянием, сделать ошибку в нем сложнее.
|