Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0 > Статьи

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 31.10.2014, 21:10
Gerbert вне форума Посмотреть профиль Найти все сообщения от Gerbert
  № 621  
Ответить с цитированием
Gerbert
Banned
[+1 06.12.14]
[+1 18.12.14]
[+1 30.12.14]

Регистрация: Aug 2014
Сообщений: 461
Мне кажется, что Вы угараете, от нечего делать. Вы говорите, что храните DO в модели, а на следующий день говорите, что так не делаете. Когда Вас цитируешь, то Вы говорите, что "написали не подумав" и "так делать нельзя" и ещё на следующий день опять спрашиваете, где хранить представления. Но зато, цитирую!
Цитата:
Я прочитал данную тему раз 5
Вспомнилась фраза из кинчика - "Я есть Грут".

Добавлено через 8 минут
Вам нужно наверное прямо сказать - вьюшки хранятся во вьюшках, контроллеры, в контроллерах, модели в моделях.
И добавить - и только!

Добавлено через 13 минут
Цитата:
Но не ясно, где хранить нарисованные объекты(любой объект можно перетаскивать на сцене), кто их будет хранить, удалять, добавлять, слушать их события и тд.
Это к mvc не относится. Это уже, как Вам лучше. Приложение собирается, как пирамида, из кусков, а не монолитом, как гора.

Старый 31.10.2014, 21:51
lammer.Ok вне форума Посмотреть профиль Отправить личное сообщение для lammer.Ok Найти все сообщения от lammer.Ok
  № 622  
Ответить с цитированием
lammer.Ok

Регистрация: Nov 2012
Сообщений: 55
Цитата:
Это к mvc не относится
Я пытаюсь и понять, если это не относится к mvc, то к чему это относится?
Я бы хранил вьюшки нарисованных объектов во вьюшке сцены, так как они к ней непосредственно относятся. Удалял, добавлял, слушал их вьюшкой сцены и тд. Но вы говорите, что данные операции к mvc не относятся.

Старый 31.10.2014, 22:26
Gerbert вне форума Посмотреть профиль Найти все сообщения от Gerbert
  № 623  
Ответить с цитированием
Gerbert
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.

Старый 01.11.2014, 03:34
lammer.Ok вне форума Посмотреть профиль Отправить личное сообщение для lammer.Ok Найти все сообщения от lammer.Ok
  № 624  
Ответить с цитированием
lammer.Ok

Регистрация: Nov 2012
Сообщений: 55
Цитата:
Или если хотите, сделайте маленький пример - два квадрата, которые друг на друга заходят ровно на половину.
По клику мышки, они меняют глубину местами, то один выше, то второй. И при каждом клики пользователь получает +10
очков. И по завершению 20 секунд, в trace нужно вывести сумму всех очков.
Так как на as3 не программирую написал простой псевдокод.
Пусть это будет упрощенная игра. Тогда у нас есть GameModel, GameView и GameController. Также есть класс-вьюшка RectangleView.
Код AS3:
//Главный класс, инициализирует MVC
Main {
   model = new GameModel();
   view = new GameView(model);
   controller = new GameController(model, view);
}
Model
Код AS3:
//Модель 
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;
   }
}
View
Код AS3:
//Представление 
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);
   }
}
Controller
Код AS3:
//Контроллер
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);
   }
}
Код AS3:
RectangleView {
   //тут ничего интересного, всё обычно
}


Последний раз редактировалось lammer.Ok; 01.11.2014 в 06:55.
Старый 01.11.2014, 12:23
Gerbert вне форума Посмотреть профиль Найти все сообщения от Gerbert
  № 625  
Ответить с цитированием
Gerbert
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.
Старый 01.11.2014, 19:33
lammer.Ok вне форума Посмотреть профиль Отправить личное сообщение для lammer.Ok Найти все сообщения от lammer.Ok
  № 626  
Ответить с цитированием
lammer.Ok

Регистрация: Nov 2012
Сообщений: 55
Ответьте на несколько вопросов и закончим с этим. Я опишу, что у меня уже готово. От вас прошу лишь только подсказать или подкорректировать логику архитектуры.
Пока с вами переписывался кое-что переосмыслил и написал отдельный модуль Node(узел), который любую фигуру построенную из линий(потом и для кривых сделаю) расширяет до отдельного узла на сцене, то есть нарисовали, предположим, ромб, то эту фигуру можно перетаскивать через внутренний модуль DragAndDrop в главном модуле Node. Также сделал слушатель событий мыши, удаление и добавление для фигур. Теперь я хочу сделать, как вы мне написали, вьюшку Layer, куда будут добавляться вьюшки нарисованных объектов. Главная вьюшка сцены будет хранить в себе список слоёв layers. Главная модель сцены будет хранить id тек. выбранного слоя из списка layers. То есть теперь из любого меню приходит команда удалить слой, контроллер меняет состояние главной модели deleteLayer = true, вьюшка сцены слушает изменение состояния модели, берёт тек. слой по id из модели, кричит всем чайлдам удалить все узлы, когда все узлы удалились слой передает сообщение вьюшке сцены и она его удаляет из своей коллекции. Как вам такая идея?

Старый 01.11.2014, 20:52
Gerbert вне форума Посмотреть профиль Найти все сообщения от Gerbert
  № 627  
Ответить с цитированием
Gerbert
Banned
[+1 06.12.14]
[+1 18.12.14]
[+1 30.12.14]

Регистрация: Aug 2014
Сообщений: 461
<the свои слова обратно и предложу продолжить постижение самых-самых основ.
Делаю это не для того, чтобы у Вас исчерпались вопросы, а для того, чтобы Вы
сами научились на них отвечать.

Продолжим... Вот у Вас есть готовый код игры и заказчик просит Вас сделать ещё одну.
Задание такое - на сцене пустота, а при клике мышки создается кружок в месте клика.
При каждом клики пользователь получает +10 очков. И по завершению 20 секунд, в trace нужно
вывести сумму всех очков.

Сделайте, я Вам укажу на самую главную ошибку, а потом уже комментарии дам по последнему вопросу.

Старый 01.11.2014, 21:05
lammer.Ok вне форума Посмотреть профиль Отправить личное сообщение для lammer.Ok Найти все сообщения от lammer.Ok
  № 628  
Ответить с цитированием
lammer.Ok

Регистрация: Nov 2012
Сообщений: 55
Цитата:
Задание такое - на сцене пустота, а при клике мышки создается кружок в месте клика.
При каждом клики пользователь получает +10 очков. И по завершению 20 секунд, в trace нужно
вывести сумму всех очков.
Это все представить в mvc виде? Псевдокодом или подучить as3 и сделать рабочий вариаант?

Старый 01.11.2014, 22:04
Gerbert вне форума Посмотреть профиль Найти все сообщения от Gerbert
  № 629  
Ответить с цитированием
Gerbert
Banned
[+1 06.12.14]
[+1 18.12.14]
[+1 30.12.14]

Регистрация: Aug 2014
Сообщений: 461
Я немного погорячился и Ваш псевдокод вполне приемлем, так что меня не напрягет, если Вы его в том же ключе будете соблюдать. А вообще странно, что Вы не зная as3 обсуждаете тему здесь. Вы на каком языке пишите?
И да, в виде mvc.

Старый 01.11.2014, 22:28
lammer.Ok вне форума Посмотреть профиль Отправить личное сообщение для lammer.Ok Найти все сообщения от lammer.Ok
  № 630  
Ответить с цитированием
lammer.Ok

Регистрация: Nov 2012
Сообщений: 55
Сижу здесь потому что лучше и богаче темы о mvc не видел. К тому же иногда есть у кого-нибудь из форумчан уточнить детали. Программирую на java/c#/javascript, знаю as2, но язык не важен, главное окончательно разобраться в самом принципе mvc.
Цитата:
И да, в виде mvc.
на самом деле для новой "задачи" хватит одной вьюшки из mvc) Нечего выводить в модель и контроллер.


Последний раз редактировалось lammer.Ok; 01.11.2014 в 22:51.
Создать новую тему Ответ Часовой пояс GMT +4, время: 07:48.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 07:48.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.