Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Опять MVC - как лучше? (http://www.flasher.ru/forum/showthread.php?t=214735)

Appleman 01.12.2017 13:01

Камрады! Подскажите, пожалуйста, ещё по MVC для моего текстового квеста (кто не в теме, вот в этом сообщении буквально первые два предложения о механике).

Принципиальная схема работы такая: каждую итерацию модель рассчитывает и фиксирует изменение всех параметров, вью обновляет весь вывод. Дальше нужно взять имеющиеся действия (т.е. экземпляры класса Actions для возможных игровых действий, типа "ударить ножом в глаз" :)), по текущему сотоянию модели отобрать те из них, которые в данный момент доступны игроку, вывести их на экран и дождаться от него выбора. Это запускает следующую итерацию.

Вопрос, кто конкретно должен "заведовать" этими самыми экземплярами действий? Кто должен создавать их и делать для игрока выборку доступных? Мне кажется, что Контроллер, но возможно я ошибаюсь. Просьба прокомментировать. Спасибо.

ZergMaster 01.12.2017 16:14

вот ты сам пишешь
Цитата:

по текущему сотоянию модели отобрать те из них, которые в данный момент доступны игроку
Соответственно, мне кажется, сам и отвечаешь на вопрос.. Что за это отвечает модель. Получается, что модель выступает в качестве ситечка, через которое мы пропускаем все доступные действия, а на выходе остаются только нужные. Мы даем их модели, она сопоставляет с собой (глобальными характеристиками, характеристиками игрока и т.п.) и возвращает актуальные на данный момент. Я бы вообще сделал getter actions в модели какой-нибудь, который бы выдавал доступные действия в зависимости от кучи всяких параметров, таких, как уровень, хар-ки игрока и т.п.

Appleman 01.12.2017 17:12

Так-то оно так, но меня всё-равно одолевают сомнения. Вот смотри, модель управляет логикой, делает расчёты и хранит в себе изменение всех существенных значений. Если посмотреть на описанную мной ситуацию, то в подборе доступных действий нет ни расчётов, ни изменения состояний. У контроллера есть ссылка на модель со всеми её потрохами, так что технически контроллер может выполнять такую функцию. Плюс в теории именно контроллер должен послать в модель сигнал о том, что ей пора работать. Что это будет, как не выбранное пользователем действие?

ZergMaster 01.12.2017 18:08

Насколько я понимаю, отсев действий происходит не в результате манипуляций пользователя (=контроллера), а в соответствии с параметрами модели. Поэтому и отвечает за это Модель. Ты делаешь ей запрос на доступные действия - она тебе их выдает. Никого не волнует, что происходит внутри модели. Вью интересует лишь результирующий массив действий, чтобы их отобразить, контроллер отвечает за то, чтобы сообщить модели о клике по выбранному действию. Всё.

Zebestov 01.12.2017 18:40

Контроллер — самая тонкая часть MVC, он просто заведует течением работы приложения. Ждет отклика, пинает модель, ничего более. Создавать список доступных действий надо там, где игровая логика — в модели. Этот список должен быть доступен отображению, чтобы оно могло нарисовать все необходимое.

Wolsh 01.12.2017 19:25

Кажется я понял, откуда такая любовь к контроллерам. Это место, в котором нет никакого страшного MVC: есть ссылка на модель "со всеми потрохами" и на Вью со всеми бубенцами, и можно писать код как в кадре, не заморачиваясь всякими ООП.

undefined 01.12.2017 19:55

иногда мне кажется, что единственная задача контроллера - это не дать вьюхам напрямую дергать методы модели.Хотя тут высказывалось мнение,что контроллер еще должен заведовать всей клиент-серверной кухней.

Appleman 03.12.2017 15:30

Спасибо большое, господа, за содержательные ответы. Понял, согласился, отстал. Иронию, замеченную в некоторых репликах, считаю неуместной, т.к. нахожусь я в начале пути освоения ООП в целом и MVC в частности :) и без наивных вопросов никуда.

ZergMaster 04.12.2017 10:09

Wolsh
Цитата:

Сообщение от Wolsh (Сообщение 1203268)
Кажется я понял, откуда такая любовь к контроллерам.

Я думаю, это потому, что у него название такое, провокационное. Контроллер. Кажется сразу, что он должен все контролировать и всем управлять. Что все остальное - статические данные, ничего не умеющие, а любые "телодвижения" осуществляет контроллер. Западня.

Добавлено через 4 минуты
Я тут понял, что, любой объект - это модель. И мы можем произвести с этим объектом некоторые манипуляции, узнать некоторые его параметры, а также у него может быть некоторый view (но это не точно).. Это решает некоторые идеологические вопросы в моей голове, связанные с MVC.. )

Appleman 04.12.2017 11:08

Можно ещё вдогонку? Я сам не сомневался, но тут вас почитал и решил всё-таки уточнить. У меня выводится портрет персонажа в HUD. В зависимости от его состояния HP, подбирается нужный спрайт: от здоровенького, до залитого собственной кровищей (как в DOOM).

Пока вся логика выбора портрета целиком заложена во Вью. То есть при изменении параметров персонажа, вью "спрашивает" Модель, сколько HP осталось, и в зависимости от этого подбирает нужный портрет. И только Вью "знает", сколько всего спрайтов предусмотрено и для какого случая. Если я захочу, например, усложнить этот механизм, и к кровище на лице добавить выражения ярости или страха, в зависимости от значений других свойств, то всё равно вся эта логика останется во Вью. Верно?


Часовой пояс GMT +4, время: 14:55.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.