![]() |
|
||||||||||
|
|||||
|
В моделях у меня таймера. Самый частый из них - раз в секунду. А это реже чем раз в кадр в целых 30 раз (у меня в проектах вообще обычно 60).
Добавлено через 5 минут И это как правило вообще один глобальный теймер с частотой раз в секунду. В нем добавляются/удаляются коллбеки которые собственно на каждый тик дергаются. Если нужна рекция чаще чем раз в секунду - есть еще одна глобальная штука - глобальный ентерфрейм. Ситема та же. Добавить/убрать коллбек и дернуть каждый - раз в кадр. Коллбеки в основном в моделях находятся. Но бывают варианты. Ну и ентерфрейм вот в текущем проекте реально только в одном модуле используется.
__________________
Кто к нам с чем для чего - тот у нас того от того. |
|
|||||
|
Dukobpa3, а как на счет ветвления контроллеров? В этом случае ничего раздуваться не должно. Может "пассиваная" модель и считается не правильным подходом, но при этом про ветвление этой структуры в той же википедии умалчивается (если где есть - дайте почитать, поделитесь ссылкой, интересно), а это предотвращает раздувание контроллера. При этом имеем четкое "разделение власти". Все же считаю, что программа не должна зависеть только от данных (как это может пропагандироваться), но и, к примеру, от "состояний". Где должно храниться "состояние"? Возможно в модели. Да, несколько озадачивает. В чем тогда предназначение контроллера? Список интерактивных объектов с подписанными слушателями и обработчиками и все?
__________________
Ну все, теперь Забава м-о-я. Гы-гы, а корабль мой! |
|
|||||
|
Регистрация: Jul 2008
Сообщений: 912
|
Хоршо, глобальный энтерфрейм где длжен находиться в MVC? И не разрушит ли его глобальность ооп принципы и сам паттерн?
|
|
|||||
|
Ветвление моделей и вьюх - пожалуйста, ветвление контроллеров я стараюсь избегать.
У меня есть мейнКонтроллер, который содержит пачку дочерних контроллеров (все что есть в системе) и собственно их инициализирует. В итоге все модули получаются на одном уровне, и ими легко управлять при любой сложности. Легко включить выключить любой из них. А если ветвить ссылками то призрачный "контроль" конечно вырастет, но и связанность тоже, и это уже обрубит модульную структуру на корню. Добавлено через 1 минуту Цитата:
Я всунул туда же где и глобальный таймер. Просто в один и тот же синглтон можно добавить либо коллбек на таймер либо на ентерфрейм. И этот синглтон только этим и занимается - дергает периодические коллбеки с заданным интервалом. Иногда синхронизируя текущую дату с сервером. Добавлено через 4 минуты Цитата:
- слушает вью - слушает другие контроллеры - по командам от вью либо от других контроллеров может попросить модель поменять данные - либо передать какую-то команду другим контроллерам. - всё. В нем вполне достаточно будет логики и кода для обработки разных команд от вьюх и других контроллеров. На этом его функция как для меня и заканчивается.
__________________
Кто к нам с чем для чего - тот у нас того от того. |
|
|||||
|
Цитата:
Цитата:
Добавлено через 2 минуты Dukobpa3, так кто все-таки меняет данные? Вью или контроллер? Получается, что оба. Получается, что мы можем не знать кто именно, хотя это один из основополагающих моментов.
__________________
Ну все, теперь Забава м-о-я. Гы-гы, а корабль мой! |
|
|||||
|
Цитата:
Иногда там есть и модель и вью, иногда только модель, иногда только вью, иногда по парочке каждых. И тыкнув пальцем в контроллер можно сказать - вот модуль, от него всё пляшет. А тыкнув пальцев во вью или модель придется еще поковыряться и найти к какому модулю она относится. (это решается грамотной группироовкой пакетов и иенами, но если абстрактно - дело именно так и обстоит) Ну и получается контроллеры это типа как стартовые точки модулей. Добавлено через 40 секунд Цитата:
Добавлено через 2 минуты Вью ВПРИНЦИПЕ ничего не меняет. Она может попросить контроллер их поменять, а контроллер может и не согласиться. И контроллер не меняет данные, он просит модель АКТУАЛИЗИРОВАТЬ ДАННЫЕ согласно текущего состояния системы. А модель уже сама вкурсе где взять конкретные цифры и куда их вписать.
__________________
Кто к нам с чем для чего - тот у нас того от того. |
|
|||||
|
Регистрация: Jul 2008
Сообщений: 912
|
В моём случае, например нужно перемещать главного героя нажатием клавиш, при твоём подходе вьюха самодостаточная - имеет весь функционал для данного действия, она сама прослушает нажатие, сама переместит в ентерфрейме объект и отрисует его. Зачем нужен контроллер и модель?
|
|
|||||
|
Чуток не так.
Переместить героя - скорее всего нужно будет помнить его последнюю позицию, значит она должна оказаться в модели. Т.е.: - тыкаем в клетку на карте - вью диспатчит: "пытаемся походить" - контроллер получает событие, дергает паблик в модели: "походитьГероемТуда-то" (координаты пришли в событии) - модель в этом паблик методе делает проверку. Можем походить, не можем и если можем то меняет координаты героя, и диспатчит: "координаты героя поменялись" - вью слышит что координаты поменялись, переставляет героя в новые координаты. Проблемы начинаются там где нужно анимированное перемещение. По сути до этого модели дела нету. Она координаты куже поставила. А вот во вью уже будут твинеры или ентерфреймы, необходимые блокировки екрана чтоб пользователь не тыкал в екран пока герой идет и в таком духхе. Но в математике у героя координаты уже новые. (опять же по ситуации. Это лишь один из вариантов) А теперь другой вариант. Всё это должно синхронизироваться с сервером. Тогда: - тыкаем в клетку на карте - вью диспатчит: "пытаемся походить" - контроллер получает событие, посылает команду контроллеру сервера: командаПоходитьВТочку(х, у) - сервер обрабатывает, присылает ответ ок/неОк. - какой-то серверКонтроллер кричит контроллеру карты мол тут команда пришла поменять координаты - наш контроллер получает эту команду - дергает паблик в модели: "походитьГероемТуда-то" (координаты пришли в событии) - модель в этом паблик методе меняет координаты героя, и диспатчит: "координаты героя поменялись" - вью слышит что координаты поменялись, переставляет героя в новые координаты. Добавлено через 4 минуты Т.е. Если модели нужно знать новые координаты то надо диспатчить в контроллер, а контроллер просит модель проверить можно ли и если можно - сделать. Если модели знать не обязательно - то вью может быть "самодостаточной" как ты и сказал. А теперь самое главное. Как понять когда же модели нужно знать а когда не нужно: - если на это новое состояние будет опираться математика - нужно. - если это чисто визуальная плюшка - пофиг. Например мы идем героем и на нас в люббой момент может накинуться враг, и результаты атааки могут зависеть от того где герой находится. Тогда понятночто модель ждолжна знать как это всё считать и координаты героя ей важны. И другой вариант. Мы управляем не самим героем а просто кликаем в шкаф в комнате, герой к нему подходит и открывает. Тут собственно пофигу, сам по себе герой в данной ситуации где-то там наравне с партиклом летящим за указателем. Суть не в том куда он идет, а в том что он пытается открыть. Тогда само перемещение героя может остаться во вьюхе, а вот открытие чемодана - уже надо продиспатчить контроллеру, чтоб он подумал что с этим делать.
__________________
Кто к нам с чем для чего - тот у нас того от того. |
|
|||||
|
Регистрация: Jul 2008
Сообщений: 912
|
Нет ни один из примеров не подходит у меня игра без сервера и не пошаговая, а реалтайм, ходим по событию клавиш, вид сбоку и физика Box2D. MVC для такой игры не подходит?
Так нужно ещё интернет порыть об этом паттерне. Хотя вариант ПсихоТигра убедительней. Расскажите кто нибудь кроме Дикобраза кто как поступает в MVC с ентерфреймом? Последний раз редактировалось Sintesis; 09.11.2012 в 02:27. |
|
|||||
|
Не за что
) Лол)Добавлено через 44 секунды Самое обидное что какой-то мудак даже в вики переписал правильный паттерн на тот который ты называешь: "вариант тайгера". А раньше там было примерно то о чем я тут вещаю.
__________________
Кто к нам с чем для чего - тот у нас того от того. |
![]() |
![]() |
Часовой пояс GMT +4, время: 14:37. |
|
|
« Предыдущая тема | Следующая тема » |
|
|