|
|
|||||
Banned
[+4 24.02.14]
[+4 07.11.13] [+ 13.03.14] Регистрация: Mar 2013
Сообщений: 1,864
|
Цитата:
Кому верить? Добавлено через 37 секунд А про эту статью я сто раз читал, что она вроде как не правильная... Добавлено через 7 минут AlexCooper если Вы наберётесь силы и прочтете статью, то увидете, что Ваши слова отвергают на протяжении всей темы. |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Akopalipsis, для начала скажите, к какому из фигурантов MVC относится сервис?
__________________
Reality.getBounds(this); |
|
|||||
Banned
[+4 24.02.14]
[+4 07.11.13] [+ 13.03.14] Регистрация: Mar 2013
Сообщений: 1,864
|
Цитата:
Цитата:
|
|
|||||
Цитата:
Цитата:
В правильном MVC - в игру можно играть вообще без визуализатора. Визуализатор - это лишь порт вывода данных игры игроку. Красивый и разноцветный, со свистелками и перделками - но никак не влияющий на игровой процесс. Визуализатор живёт своей жизнью, он рисует модель игры так, как ему хочется. В визуализатор может помещаться слушатель пользовательского ввода, который будет регестрировать клики мышкой, ввод с клавиатуры и прочие действия игрока. Затем, слушатель их минимально обрабатывает - (нажата кнопка включения двигателя, нажата кнопка стрельбы) Эти данные считываются контроллером и уже он принимает какие-то конкретные действия. Слушатель помещается во вью только потому, что от-туда ближе всего доступ к устройствам ввода. Цитата:
Если более обширный пример - то система игровых триггеров. Игровой триггер - это некоторое действие (контроллер) который активируется по наступлению некоторого события в игре (подписан на модель)
__________________
Дети не должны знать о своих родителях Последний раз редактировалось Tails; 30.09.2013 в 21:04. |
|
|||||
Я тут придумал ситуацию которая сможет меня заставить поламать свой "правильный MVC". Надеюсь знатоки подскжут, как этого избежать.
Итак, предположим, что у нас есть ТаверДефенс. Каждой башне присваивается трофей за убиение противника (скальп, уши, зубы). В конце уровня все трофеи обналичиваются. Происходить это должно так: открывается окно, в котором все задействованые башни строятся в ряд, а перед ними ставится сундук с казной. Далее с каждой башни по очереди сыпится в сундук столько монет, сколько стоят ее трофеи, а потом звучит какая нибуть фраза типа "Гуд джоб!", "Вел доне!" или "Ух, блоод моней...". Когда все башны подоены появляется кнопка закрытия окна. Лично мне на ум приходит умная самостоятельная вьюшка, которая принимает от модели текущее количество денег в казне и массив, с количеством элементов, равным количеству башен и каждый элемент обозначает количество заработаных башней денег. Таким образом модель занимается только важной работой (наблюдает за башнями и во время обналички трофеев расказывает кто сколько заработал). Что вид будет делать с этими данными ее не колышет. А вид действует по своему сценарию - сгребает монеты с башни и благодарит ее фразй, потом переходит к следующей. Завтра я передумаю и буду сгребать монеты со всех башен одновременно и это никак не отобразится на модели. Зато модель не знает сколько вся эта сценка должна длиться. И даже если посчитать сколько времени уйдет на сгребание всех монет, то все равно модели не извесно сколько длится звучание благодарственной фразы. По этому ей прийдется глубоко вдохнуть и ждать разрешения выдохнуть кнопку закрытия окна. В результате мы имеем изящную, но зависимую модель и умный вид, который может легко и без вреда для окружающих менять свое поведение. Если же следовать заветам MVC и делать модельку самостоятельной, тогда для реализации данной идеи ей прийдется обзавестись таймером; сделать себе шпаргалку с длительностью звуков благодарения; расчитать положение башен и сундука; расчитывать движение монеток от каждой башни к сундуку; решать каой же фразой поблагодарить солдат из башни за проделаную работу; требовать, чтобы кто нибуть произнес эту фразу, а самой в это время ждать с секундомером в руках, пока фраза будет произнесена (в надеже, что ее вообще хоть кто нибудь взялся озвучить). По завершению всех этих епилептических подергиваний модель, с чувством выполненого долга сможет потребовать кнопку закрытия окна. Печальная картина... Но зато теперь претензии к вьюшке минимальны. Ей вообще теперь не о чем думать - расказывай, что от модели услышала и все дела. Даже начального образования не нужно... И на счет изменения в сценарии получения денег, теперь нам однозначно прийдется менять модель, а добавляя новые фичи получаем необходимость и вьюху кромсать. А теперь очень жду, что мне подскажут, почему мой MVC такой некрасивый, а если он у вссех такой, то почему от него так тащатся? |
|
|||||
Цитата:
__________________
Дети не должны знать о своих родителях |
|
|||||
Banned
[+4 24.02.14]
[+4 07.11.13] [+ 13.03.14] Регистрация: Mar 2013
Сообщений: 1,864
|
Цитата:
Wolsh ? |
|
|||||
Да, нужно уточнить:
В данном примере, мы имеем окошко вьюшки - отображающее статистику пройденного уровня. Это окошко - диспетчер, которое изначально имеет 1 событие - [EventExit]. На это событие подписан контроллер, который ожидает его от окошка. Получается такая схема: Игра заканчивается, запускается окошко статистики, которое зараза, сразу не показывает кнопку выход! Оно насильно отобразит вам анимацию, проиграет 15 звуков и только после этого появиться кнопка выхода, нажав на которую, вышлется событие [EventExit] и внешний контроллер продолжит выполнение. Таким образом, в своей локальной зоне - вьюшка сама решает, когда ей показать кнопку, как выслать событие [EventExit] (нажав на кнопку, подождав всю анимацию или т.п.) и выслать ли вообще. Дробовик перезаряжается не через анимацию же! У дробовика модели есть переменная - recharge, которая указывает, сколько ещё времени нужно дробовику, что-бы тот перезарядился. Дробовик в моделе выстрелил - вью словила эвент и нарисовала огонь. Что тут не понятного?
__________________
Дети не должны знать о своих родителях Последний раз редактировалось Tails; 30.09.2013 в 21:48. |
|
|||||
Banned
[+4 24.02.14]
[+4 07.11.13] [+ 13.03.14] Регистрация: Mar 2013
Сообщений: 1,864
|
Тогда получается так: юзер убивает последнего монстра и модель узнает из внутреннего события об окончании монстров в хранилище. Она шлет событие "конец". Вью его ловит и проигрывает анимацию о длительности которой модель не обязана знать. Внутри вью как не крути логика есть все равно, но своя внутри-вьшная, считать кол-во частиц, начало конец анимации и т.д. Но её события на все приложение роли не какой не оказывают, даже по окончанию анимации и после принятия внутреннего решения о показе кнопки, при клике она шлёт событие передаваемое контроллером в модель. И модель уже решает - перехожу в главное меню. И это нормально. Но у меня после прочтения вопроса ТС до сих пор остался вопрос без ответа - почему в описанном мной случаи уведомление от вью модели - это нормально, а уведомление, когда модель не знает о времени воспроизведения анимации выстрела - это не нормально...?
|
Часовой пояс GMT +4, время: 10:31. |
|
« Предыдущая тема | Следующая тема » |
|
|