![]() |
|
||||||||||
|
|||||||
|
Имелся в виду простейший пример который не ограничивается какой-то парой тройкой триад, а уже что-то более похожее на полноценное приложение.
Цитата:
Контроллер - AI, калькулятор. Вью - морда, а модель - БД. Для того чтобы узнать в каком месте рисоваться - вьюха спрашивает координаты у модели. Для того чтобы получить операнды для расчетов логики - контроллер спрашивает данные у модели. Исходя из этого модель не имеет публичных методов (в том числе и протектед) а имеет только пачку геттеров-сеттеров. Контроллер видит и то и то, а вью только геттеры. Плюс в каждом сеттере висит dispathEvent("changed param #xxx") - который слышат все желающие, и все кто от этого зависят - подстраиваются. Например контролер поменял координаты башни, модель отмаячилась, а вьюха услышала об этом и перерисовалась. Цитата:
Я просто упустил эту ссылку дабы не усложнять схему. Но да, ссылка есть, как минимум вью должна слушать события модели, а так же иметь доступ к геттерам модели. Цитата:
Цитата:
Цитата:
Цитата:
будет наверное так в итоге: - Триада окна -- триада уровня -- триада интерфейса -- триада доп-элементов(возможно и без нее) Это кстати да. Я так же упустил что можно клонировать нужные модели, или же вообще передавать существующие ссылки. Спасибо за ответы. Добавлено через 49 минут помедитировал на "типовую схемку из википедии". - Контролер содержит в себе модель и вью. - вью содержит в себе модель. - контроллер слушает вью. - вью слушает модель. т.е. касательно башни это будет выглядеть примерно так: - V: "контроллер, Враг на горизонте" - C: "вьюха, взять на прицел, заряжааай!!!" - V: "Заряжаю" - V: "Контроллер, Заряжено!" - C: "Вьха, Огонь! Модель, у нас минус снаряд." Вторая ситуация: - V: "Ахренеть, нас враги атакуют" - C: "Модель, делай минус 10 хп - M: "Сделано, осталось 90% - V: "Поняла, рисую анимацию потерпания от ударов". ...... - V: "Контроллер, они до сих пор атакауют" - C: "Модель, делай минус 10 хп - M: "Сделано, осталось 60% - V: "Поняла, рисую анимацию пожара". ...... - V: "Контроллер, а они еще атакауют" - C: "Модель, делай минус 10 хп - M: "А хрен вам, овердамадж получили. Нету у нас больше хп" - V: "Поняла, взрываемся. Контроллер, слышь, чувак, взорвались мы". - C: "Товарищ Майор, мы взорвались" - ParentC: "МодельУровня, делай минус башню. ВьюУровня - убери мусор" //**************** Пральна я понимаю? Просто охота уже разобраться чтоб сразу и навсегда. Потому могу флудить глупыми вопросами.
__________________
Кто к нам с чем для чего - тот у нас того от того. Последний раз редактировалось Dukobpa3; 02.01.2011 в 23:45. |
|
|||||
|
А почему у вас вьюха определяет что ее бъют?
Добавлено через 10 минут Применительно к вашему примеру игры жанра TD, я бы построил архитектуру так: Есть модель (не один класс, а пакет), в которой все происходит, что должно происходить на экране, только виртуально. То есть обновляются координаты врагов и наносится урон башням. А вьюха (тоже не один класс =)) просто обновляет визуальное представление соответственно текущему состоянию модели. Контроллеры вижу тут примерно такие: - Юзер, что-то кликнул (строим башню, выходим в меню, пауза и тд) - Обновление всей модели на единицу времени И еще, Цитата:
а у тут более общий случай - композиция.
__________________
Сам себе репортер |
|
|||||
|
Видимо я зря писал статьи про эмвэцэ.
![]()
__________________
Тут мужик танцует и поёт про флэш |
|
|||||
|
Psycho Tiger, нет не зря. Стиль подхвачен верно =)
Цитата:
__________________
Сам себе репортер |
|
|||||
|
Стиль не подхвачен, стиль в оригинале, так что попрошу
![]() Цитата:
Хотя вьюха жеж не понимает что ее бьют, она просто видит что враг близко, она ж тупая. Сиськи большие, а размер моска обратно пропорционален размеру сисек. Типа такого происходит: - вью башни: тут какая-то хрень близко - контроллер: так это враг, он тя бить будет, рисуй пожар. Слышь, модель - минусуй хп. ... где-то в это же время: - вью врага: тут какая-то хрень близко - контролер врага: так это башня, че стоишь, рисуй удар. //********************** Путаница опять Получается в таком случае лучше не плодить кучу контролеров на каждую башню и каждого врага, а попытаться обойтись одним контролером уровня. А там он уже будет глядеть: "враг1 на расстоянии выстрела башни1. Отдать башне1 команду стрелять". А башни и враги будут просто суб-вьюхами одной большой вьюхи уровня. Модели же башен и врагов будут просто суб-моделями модели уровня(ну типа в модели уровня где-то массив башен, и массив врагов.)
__________________
Кто к нам с чем для чего - тот у нас того от того. |
|
|||||
|
Контроллер вертит моделями и определяет, были ли столкновения или нет. Заносит в модели инфу, если было столкновение.
__________________
Тут мужик танцует и поёт про флэш |
|
|||||
|
Походу вкурил.
У меня были шоры на тему того что триада должна быть триадой. Ну а теперь Вывод таков: надо не бояться делать к примеру один контроллер на пачку вьюх и пачку моделей. И в то же время одна вьюха может быть целой триадой. Как-то так. Вроде теперь всё ясно. Спасибо. (ну если я со своими выводами ошибся, то готов продолжить дискуссию)
__________________
Кто к нам с чем для чего - тот у нас того от того. |
|
|||||
|
Ага, верно. Ровно как и вьюха может сосать 3-4 модели, так и один контроллер может отдавать приказы 3-4 вьюхам, так и контроллер может слушать 3-4 вьюхи, так и контроллер может менять 3-4 вьюхи.
Цитата:
__________________
Тут мужик танцует и поёт про флэш |
|
|||||
|
Цитата:
Например тот же пример тавердефа. Башня может быть просто вьюхой. а контроллер уровня уже будет всем рулить. А можно этой вьюхе прикрутить контроллер минимальный какой-то. К примеру в его задачи будет входить оценивать расстояние до врагов, формировать массив врагов до которых может дострелить. Если какой-то враг попадает в область на расстоянии выстрела - внести в список. Если выходит из этого круга - удалить из списка. Ну и диспатчить выше моменты изменения списка. Оценка расстояния это ведь логика, потому этому действию место в контроллере. Башне ведь проще прошерстить 9 клеток (3х3) и сделать свой маленький массив из, к примеру, 3-х мобов в области своей видимости, нежели контролеру уровня каждый кадр шерстить всё поле и делать перерасстановку сил из 10-и башен и 40-а врагов. //******************** Короче суть ясна. А дальше уже под каждое конкретное приложение своя архитектура нужна. //******************** А если так глобально, то мне импонирует данная система ) Куда удобнее работать с 10-ю классами по 50 строк каждый чем с одним классом на 500 строк ![]()
__________________
Кто к нам с чем для чего - тот у нас того от того. |
|
|||||
|
Регистрация: Mar 2009
Адрес: this.x=0;this.y=0;this.z=0
Сообщений: 89
|
Привет всем, тему не осилил(прочитал все, но в башке - каша), поэтому спрашиваю, контроллер(предположим игры) создает контроллер игрока, уровня и врага. Контроллер игрока в свою очередь создает модель игрока и вьюшку игрока, с уровнем и врагом - также, дальше что? модели ни про свои ни про чужие вьюшки не знают, расчет движения игрока/врага происходит в контроллере игры? Как устроить проверку столкновений? Или я путаю теплое с мягким?
ЗЫ. Код приводить не надо, тезисно. |
![]() |
![]() |
Часовой пояс GMT +4, время: 01:29. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|