Цитата:
Сообщение от Wolsh
(Сообщение 1201981)
В парадигме MVC это вторая буква называется View. Обычно это класс, наследующий DisplayObjectContainer (через Sprite, DOC нельзя наследовать напрямую) и отвечающий за вывод на экран изображения
|
Да, пока всё складывается так, что подход MVC оказывается наиболее логичным, как минимум, он в мою голову укладывается и помогает упорядочить кипящую там кашу. Я правда других не видел :), но есть впечатление, что использовать MVC - это как есть вилкой и ножом: не интеллигентская блажь, а тупо удобно.
Цитата:
Далее идут компоненты View, то есть какие-то модули, добавляемые в контейнер-View.
View их не рисует своими средствами. Кнопки сами себя рисуют, View только добавляет их в отображение или удаляет из него: как если бы View было столом, на который выкладываются предметы. Нужно показать Меню? Сделали во Вью addChild(_menu); Подписались на событие SELECT от меню. Получили событие — убрали меню из отображения, выяснили, что в нем выбрал юзер, показали то что он выбрал (или окно "сам дурак такого нет").
|
Да, общую логику я понял, здесь все ответившие в теме выше едины. Мне бы получше на уровне реализации понять. Я даже не про код, а про нормальную архитектуру классов и их взаимодействие... Всё по отдельности понимаю, а как воедино собрать - нет :(
Понятно, что корневой DOC создаётся в основном классе приложения. Далее создаём специальный класс (пусть будет GameView) для эксклюзивного выполнения функции управления DO-компонентами, создаём экземпляр этого класса в главном классе, добавляем его там же в корневой DOC через addChild(). Теперь всё, что попадёт в контейнер GameView (что кстати будет этим контейнером, переменная типа Sprite?), будет выведено на экран.
А вот дальше что? Например, у нас есть отдельный класс для меню. Он по логике также должен содержать контейнер. Плюс отдельный класс для кнопки меню, которая содержит загруженное изображение кнопки, либо её рисование программными средствами со всеми параметрами (цвета, линии и т.п.), не важно. Я понял на принципиальном уровне, что при выводе меню нам нужно поместить контейнер из класса "меню" в контейнер GameView, а потом уже в контейнер "меню" добавить какое-то число кнопок, по ситуации.
Как это реализуется? Какие классы к каким обращаются для выполнения того, что я описал выше?
Цитата:
Сообщение от undefined
(Сообщение 1201983)
На старте приложения мы просто создаем объект корневого контейнера и говорим ему "поехали".Корневой DOC создает экран "главное меню" и добавляет его в себя.Для простоты будем считать что в меню всего одна кнопка-"старт".Меню слушает события от своих детей.Например при клике по кнопке,она испускает событие "click".Меню ловит это событие и должно оповестить корневой DOC.Меню шлет событие "start game" которое слушает корневой DOC.Корневой DOC уничтожает экран "меню",создает экран "игра" и помещает его в себя.
Тут важно следить чтоб компоненты общались только со своими родителями т.е. корневой DOC должен реагировать только на события,отправленные его детьми(игр. меню и игровой экран).Т.е. не должно быть такого чтоб родитель родителя реагировал на события детей детей :).В данном примере это значит что корневой DOC не должен слушать событие "click" от кнопки старт.
|
Получается, что механизм реализуется исключительно через систему событий с их грамотной "фильтрацией по этажам"?