![]() |
|
||||||||||
|
|||||
|
Banned
[+1 06.12.14]
[+1 18.12.14] [+1 30.12.14] Регистрация: Aug 2014
Сообщений: 461
|
Мне кажется, что Вы угараете, от нечего делать. Вы говорите, что храните DO в модели, а на следующий день говорите, что так не делаете. Когда Вас цитируешь, то Вы говорите, что "написали не подумав" и "так делать нельзя" и ещё на следующий день опять спрашиваете, где хранить представления. Но зато, цитирую!
Цитата:
Добавлено через 8 минут Вам нужно наверное прямо сказать - вьюшки хранятся во вьюшках, контроллеры, в контроллерах, модели в моделях. И добавить - и только! Добавлено через 13 минут Цитата:
|
|
|||||
|
Регистрация: Nov 2012
Сообщений: 55
|
Цитата:
Я бы хранил вьюшки нарисованных объектов во вьюшке сцены, так как они к ней непосредственно относятся. Удалял, добавлял, слушал их вьюшкой сцены и тд. Но вы говорите, что данные операции к mvc не относятся. |
|
|||||
|
Banned
[+1 06.12.14]
[+1 18.12.14] [+1 30.12.14] Регистрация: Aug 2014
Сообщений: 461
|
У Вас должна быть главная вью, она создает вью холста и вью слоев ( вью слоев, это блок-меню, который отображает миниатюры слоев ). И теперь смотрите... Вью холста и вью слоев, это к mvc не относится, это два завершенных модуля.
Модуль, в том смысли, в котором говорят о законченном продукте, который автономный, то есть может переходить из проекта в проект и с которым общаться можно, только посредством api. То есть, классы полностью инкопсулированы. Что будет в этих модулях, mvc не касается, там может быть полный бардак или же тоже на mvc все построено. Но я еще раз повторю, что не могу натинуть mvc на эту задачу. Если в модель засунуть цикл слоев, который будет менять местами слои и.. И это фигня, модель должна содержать логику, а не все подряд расчеты. Забудьте о моих словах тогда и делайте как хотите. Читайте статью, книги, форум и делайте. Я больше не буду отвечать, а то Вы на меня повесите все свои проблемы и скажите, что это меня слушали. Или если хотите, сделайте маленький пример - два квадрата, которые друг на друга заходят ровно на половину. По клику мышки, они меняют глубину местами, то один выше, то второй. И при каждом клики пользователь получает +10 очков. И по завершению 20 секунд, в trace нужно вывести сумму всех очков. Вот это тех задание для девочки с первого курса, которые банеры делает. Только Вам нужно сделать на mvc. Это не шутка и не предлог отделаться, это для дальнейшего объяснения. Если вы это не сможете сделать, то фотошоп уж точно рано. И сделайте так, как видите mvc. |
|
|||||
|
Регистрация: Nov 2012
Сообщений: 55
|
Цитата:
Пусть это будет упрощенная игра. Тогда у нас есть GameModel, GameView и GameController. Также есть класс-вьюшка RectangleView. //Главный класс, инициализирует MVC Main { model = new GameModel(); view = new GameView(model); controller = new GameController(model, view); } //Модель GameModel { gameOver = false; //состояние игры score = 0; //очки //устанавливает и диспатчит состояние игры setGameOverState(flag) { gameOver = flag; dispatchEvent(Event.CHANGE_STATE); } //возвр. состояние игры getGameOverState() { return gameOver; } //суммирует и диспатчит очки addScore() { score += 10; dispatchEvent(Event.CHANGE_SCORE); } //возвр. очки getScore() { return score; } } //Представление GameView { model; //модель игры box1; //вьюшка прямоугольника 1 box2; //вьюшка прямоугольника 2 canvas; //холст //конструктор constructor(_model) { model = _model; //получаем модель игры canvas = new Canvas(); //создаём холст //создаём вьюшки прямоугольников box1 = new RectangleView(canvas, 150, 150, 1); box2 = new RectangleView(canvas, 75, 150, 2); //подписываемся на событие нажатия мыщи на прямоугольники, вызываем метод диспатча добавления очков box1.addEventListener(MouseEvent.MOUSE_DOWN, dispatchAddScore); box2.addEventListener(MouseEvent.MOUSE_DOWN, dispatchAddScore); //подписываемся на событие изменения очков игры, вызываем метод, который переставляет глубину для кажлого из прямоугольников model.addEventListener(Event.CHANGE_SCORE, swapBoxes); //подписываемся на событие изменения состояния игры, вызываем метод вывода кол-ва очков model.addEventListener(Event.CHANGE_STATE, showScore); //запускаем таймер игры, по окончанию таймера вызываем метод, который диспатчит окончание таймера setTimeout(dispatchTimerOver, 20000); } //показывает кол-во очков пользователя showScore() { //если состояние конца игры - true if (model.getGameOverState() == true) { trace(model.getScore()); //воводим кол-во очков } } //меняет местами глубины прямоугольников swapBoxes() { box1Depth = box1.getDepth(); box1.setDepth(box2.getDepth()); box2.setDepth(box1Depth); } //диспатчит добавление очков dispatchAddScore() { dispatchEvent(Event.ADD_SCORE); } //диспатчит окончание таймера dispatchTimerOver() { dispatchEvent(Event.TIMER_OVER); } } //Контроллер GameController { model; //модель игры view; //вьюшка игры //конструктор constructor(_model, _view) { model = _model; //получаем модель view = _view; //получаем вьюшку //подписываемся на событие добавления очков, изменяем в модели очки view.addEventListener(Event.ADD_SCORE, addScore); //подписываемся на событие окончания таймера, изменяем состояние игры view.addEventListener(Event.TIMER_OVER, setGameOverState); } //добавляет очки в модели addScore() { model.addScore(); } //меняет состояние игры setGameOverState() { model.setGameOverState(true); } } Последний раз редактировалось lammer.Ok; 01.11.2014 в 06:55. |
|
|||||
|
Banned
[+1 06.12.14]
[+1 18.12.14] [+1 30.12.14] Регистрация: Aug 2014
Сообщений: 461
|
Тогда прошу прощения за отнятое время. Я хотел Вам продемонстрировать хирургию,
и попросил сделать вскрытие лягушки, а в ответ получил тарелку супа. Все тонкости ушли и я не хочу навязывать Вам флешевою модель mvc, так как в Вашем языке может и не быть реализованно того, что есть в as3 и я только наврежу. Во всех языках разное mvc/ По этому я диалог прекращаю. Последний раз редактировалось Gerbert; 01.11.2014 в 14:38. |
|
|||||
|
Регистрация: Nov 2012
Сообщений: 55
|
Ответьте на несколько вопросов и закончим с этим. Я опишу, что у меня уже готово. От вас прошу лишь только подсказать или подкорректировать логику архитектуры.
Пока с вами переписывался кое-что переосмыслил и написал отдельный модуль Node(узел), который любую фигуру построенную из линий(потом и для кривых сделаю) расширяет до отдельного узла на сцене, то есть нарисовали, предположим, ромб, то эту фигуру можно перетаскивать через внутренний модуль DragAndDrop в главном модуле Node. Также сделал слушатель событий мыши, удаление и добавление для фигур. Теперь я хочу сделать, как вы мне написали, вьюшку Layer, куда будут добавляться вьюшки нарисованных объектов. Главная вьюшка сцены будет хранить в себе список слоёв layers. Главная модель сцены будет хранить id тек. выбранного слоя из списка layers. То есть теперь из любого меню приходит команда удалить слой, контроллер меняет состояние главной модели deleteLayer = true, вьюшка сцены слушает изменение состояния модели, берёт тек. слой по id из модели, кричит всем чайлдам удалить все узлы, когда все узлы удалились слой передает сообщение вьюшке сцены и она его удаляет из своей коллекции. Как вам такая идея? |
|
|||||
|
Banned
[+1 06.12.14]
[+1 18.12.14] [+1 30.12.14] Регистрация: Aug 2014
Сообщений: 461
|
<the свои слова обратно и предложу продолжить постижение самых-самых основ.
Делаю это не для того, чтобы у Вас исчерпались вопросы, а для того, чтобы Вы сами научились на них отвечать. Продолжим... Вот у Вас есть готовый код игры и заказчик просит Вас сделать ещё одну. Задание такое - на сцене пустота, а при клике мышки создается кружок в месте клика. При каждом клики пользователь получает +10 очков. И по завершению 20 секунд, в trace нужно вывести сумму всех очков. Сделайте, я Вам укажу на самую главную ошибку, а потом уже комментарии дам по последнему вопросу. |
|
|||||
|
Регистрация: Nov 2012
Сообщений: 55
|
Цитата:
|
|
|||||
|
Banned
[+1 06.12.14]
[+1 18.12.14] [+1 30.12.14] Регистрация: Aug 2014
Сообщений: 461
|
Я немного погорячился и Ваш псевдокод вполне приемлем, так что меня не напрягет, если Вы его в том же ключе будете соблюдать. А вообще странно, что Вы не зная as3 обсуждаете тему здесь. Вы на каком языке пишите?
И да, в виде mvc. |
|
|||||
|
Регистрация: Nov 2012
Сообщений: 55
|
Сижу здесь потому что лучше и богаче темы о mvc не видел. К тому же иногда есть у кого-нибудь из форумчан уточнить детали. Программирую на java/c#/javascript, знаю as2, но язык не важен, главное окончательно разобраться в самом принципе mvc.
Цитата:
Последний раз редактировалось lammer.Ok; 01.11.2014 в 22:51. |
![]() |
![]() |
Часовой пояс GMT +4, время: 07:48. |
|
|
« Предыдущая тема | Следующая тема » |
|
|