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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 18.09.2017, 19:15
GBee вне форума Посмотреть профиль Отправить личное сообщение для GBee Найти все сообщения от GBee
  № 11  
Ответить с цитированием
GBee
 
Аватар для GBee

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
А, ну ненужный элемент можно же убрать с экрана.
Я так понимаю будет какое то меню для выбора игры. Кликнули в кнопку 1 - запустилась игра 1 (меню убрали), нажали выйти из игры - убрали игру, отобразили меню. И так далее.

А так все на экране лежит слоями, как стопка картинок на столе. Картинки можно убирать из стопки или всовывать в любое место в стопке. Но сама картинка тоже может быть сложной - аппликацией, и на ней тоже может быть куча слоев
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

Старый 18.09.2017, 21:33
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 12  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Цитата:
Почему-то нигде не смог найти вразумительного объяснения

http://flasher.ru/forum/showpost.php...96&postcount=9
__________________
Reality.getBounds(this);

Старый 18.09.2017, 22:08
Appleman вне форума Посмотреть профиль Отправить личное сообщение для Appleman Найти все сообщения от Appleman
  № 13  
Ответить с цитированием
Appleman
 
Аватар для Appleman

Регистрация: Dec 2014
Адрес: Санкт-Петербург
Сообщений: 479
Цитата:
Сообщение от undefined Посмотреть сообщение
бардак - это когда на кто-угодно добавляет дисплей обжекты на сцену.Правильно:есть один DO-контейнер, который создает дочерние DO-компоненты, каждый компонент рисует свои внутренности.Если надо выввести что-то специфичное(хинт или диалог поверх всего что есть на экране) - шлем контейнеру ивент с описанием что хотим.
А можно поподробнее? Как практически реализуется такой подход? Насколько я понимаю, должен быть один и только один класс-"рисовальщик", экземпляр которого мы добавим в ДО главного класса приложения, и в котором в конечном счёте будет происходить вывод на экран чего бы то ни было. На практике это будут десятки если не сотни разных объектов. Вопрос, как организовывать всё это хозяйство? Что за дочерние ДО-компоненты ты имеешь в виду?

Цитата:
Сообщение от Wolsh Посмотреть сообщение
Спасибо.

Старый 18.09.2017, 22:59
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 14  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Код AS3:
Насколько я понимаю, должен быть один и только один класс-"рисовальщик", экземпляр которого мы добавим в ДО главного класса приложения, и в котором в конечном счёте будет происходить вывод на экран чего бы то ни было.
В парадигме MVC это вторая буква называется View. Обычно это класс, наследующий DisplayObjectContainer (через Sprite, DOC нельзя наследовать напрямую) и отвечающий за вывод на экран изображения, а также воспроизведение звуков и всю интерактивность (мышиные и тач-события могут получать только дисплейные объекты).
То есть верх цепочки выглядит как Stage > Main > View.
Далее идут компоненты View, то есть какие-то модули, добавляемые в контейнер-View.
Например, ты сейчас смотришь форум в браузере? У браузера есть Окно, которое содержит Панель вкладок, Панель адреса, Панель поиска, Панель инструментов, и собственно окно в котором отображается контент (сайт), со скроллбаром. Все это компоненты. View их не рисует своими средствами. Кнопки сами себя рисуют, View только добавляет их в отображение или удаляет из него: как если бы View было столом, на который выкладываются предметы. Нужно показать Меню? Сделали во Вью addChild(_menu); Подписались на событие SELECT от меню. Получили событие — убрали меню из отображения, выяснили, что в нем выбрал юзер, показали то что он выбрал (или окно "сам дурак такого нет").
Как-то так, если вкратце не касаясь остальных друзей в MVC.
__________________
Reality.getBounds(this);

Старый 19.09.2017, 00:02
undefined вне форума Посмотреть профиль Отправить личное сообщение для undefined Найти все сообщения от undefined
  № 15  
Ответить с цитированием
undefined

Регистрация: Oct 2006
Сообщений: 2,281
Цитата:
Насколько я понимаю, должен быть один и только один класс-"рисовальщик"
Что ты называешь "рисовальщиком"?За рендеринг экранных объектов отвечает flash runtime.Задача корневого do-контейнера - создавать/уничтожать и управлять всеми дочерними визуальными объектами.Компонент- любой визуальный объект внутри контейнера.
Например проект игры на два экрана(игр. меню и игровой экран).Корневой контейнер не имеет визуального представления, но может содержать внутри себя другие визуальные объекты(DO) и другие контейнеры визуальных объектов(DOC).На старте приложения мы просто создаем объект корневого контейнера и говорим ему "поехали".Корневой DOC создает экран "главное меню" и добавляет его в себя.Для простоты будем считать что в меню всего одна кнопка-"старт".Меню слушает события от своих детей.Например при клике по кнопке,она испускает событие "click".Меню ловит это событие и должно оповестить корневой DOC.Меню шлет событие "start game" которое слушает корневой DOC.Корневой DOC уничтожает экран "меню",создает экран "игра" и помещает его в себя.
Тут важно следить чтоб компоненты общались только со своими родителями т.е. корневой DOC должен реагировать только на события,отправленные его детьми(игр. меню и игровой экран).Т.е. не должно быть такого чтоб родитель родителя реагировал на события детей детей .В данном примере это значит что корневой DOC не должен слушать событие "click" от кнопки старт.

Старый 19.09.2017, 10:52
Appleman вне форума Посмотреть профиль Отправить личное сообщение для Appleman Найти все сообщения от Appleman
  № 16  
Ответить с цитированием
Appleman
 
Аватар для Appleman

Регистрация: Dec 2014
Адрес: Санкт-Петербург
Сообщений: 479
Цитата:
Сообщение от Wolsh Посмотреть сообщение
В парадигме MVC это вторая буква называется View. Обычно это класс, наследующий DisplayObjectContainer (через Sprite, DOC нельзя наследовать напрямую) и отвечающий за вывод на экран изображения
Да, пока всё складывается так, что подход MVC оказывается наиболее логичным, как минимум, он в мою голову укладывается и помогает упорядочить кипящую там кашу. Я правда других не видел , но есть впечатление, что использовать MVC - это как есть вилкой и ножом: не интеллигентская блажь, а тупо удобно.

Цитата:
Далее идут компоненты View, то есть какие-то модули, добавляемые в контейнер-View.
View их не рисует своими средствами. Кнопки сами себя рисуют, View только добавляет их в отображение или удаляет из него: как если бы View было столом, на который выкладываются предметы. Нужно показать Меню? Сделали во Вью addChild(_menu); Подписались на событие SELECT от меню. Получили событие — убрали меню из отображения, выяснили, что в нем выбрал юзер, показали то что он выбрал (или окно "сам дурак такого нет").
Да, общую логику я понял, здесь все ответившие в теме выше едины. Мне бы получше на уровне реализации понять. Я даже не про код, а про нормальную архитектуру классов и их взаимодействие... Всё по отдельности понимаю, а как воедино собрать - нет

Понятно, что корневой DOC создаётся в основном классе приложения. Далее создаём специальный класс (пусть будет GameView) для эксклюзивного выполнения функции управления DO-компонентами, создаём экземпляр этого класса в главном классе, добавляем его там же в корневой DOC через addChild(). Теперь всё, что попадёт в контейнер GameView (что кстати будет этим контейнером, переменная типа Sprite?), будет выведено на экран.

А вот дальше что? Например, у нас есть отдельный класс для меню. Он по логике также должен содержать контейнер. Плюс отдельный класс для кнопки меню, которая содержит загруженное изображение кнопки, либо её рисование программными средствами со всеми параметрами (цвета, линии и т.п.), не важно. Я понял на принципиальном уровне, что при выводе меню нам нужно поместить контейнер из класса "меню" в контейнер GameView, а потом уже в контейнер "меню" добавить какое-то число кнопок, по ситуации.

Как это реализуется? Какие классы к каким обращаются для выполнения того, что я описал выше?

Цитата:
Сообщение от undefined Посмотреть сообщение
На старте приложения мы просто создаем объект корневого контейнера и говорим ему "поехали".Корневой DOC создает экран "главное меню" и добавляет его в себя.Для простоты будем считать что в меню всего одна кнопка-"старт".Меню слушает события от своих детей.Например при клике по кнопке,она испускает событие "click".Меню ловит это событие и должно оповестить корневой DOC.Меню шлет событие "start game" которое слушает корневой DOC.Корневой DOC уничтожает экран "меню",создает экран "игра" и помещает его в себя.
Тут важно следить чтоб компоненты общались только со своими родителями т.е. корневой DOC должен реагировать только на события,отправленные его детьми(игр. меню и игровой экран).Т.е. не должно быть такого чтоб родитель родителя реагировал на события детей детей .В данном примере это значит что корневой DOC не должен слушать событие "click" от кнопки старт.
Получается, что механизм реализуется исключительно через систему событий с их грамотной "фильтрацией по этажам"?

Старый 19.09.2017, 15:28
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 17  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Цитата:
что кстати будет этим контейнером, переменная типа Sprite?
this
Цитата:
при выводе меню нам нужно поместить контейнер из класса "меню" в контейнер GameView
да не "из", а само меню и есть контейнер. Не "имеет", а "является" (has/is).
Мы же стремимся думать в категориях ООП, верно? Каждый Объект является законченным самостоятельным модулем. Настолько, что он может использоваться в разных проектах, в идеале — вообще без каких-либо изменений. Вчастности, это означает, что GameView не будет добавлять какие-то ОТДЕЛЬНО существующие кнопки в меню, если ты представляешь себе это как _menu.addChild(_blueButton);
Меню, скорее всего, позволяет себя НАСТРАИВАТЬ (для конкретной игры это необязательно, но в идеале да). То есть, при создании или после, Меню предоставляет возможность задать параметры — например список кнопок (всмысле их названий, текстов на кнопках). Получив все необходимые данные, Меню строит себя САМОСТОЯТЕЛЬНО, это его ответственность. Оно создает необходимое количество кнопок, распределяет их в "себе"-контейнере и подписывается на события нажатий. Когда кнопку нажмут, Меню(!) должно послать событие что юзер сделал выбор. На события наведение и увода мыши, нажатия и отпускания Кнопки должны уметь реагировать самостоятельно — это их ответственность. И, наконец, тот кто создал экземпляр Меню, подписывается на событие от Меню "юзер сделал выбор", и получив это событие, разбирается что делать дальше. Надо четко понимать где чья ответственность. Каждый элемент ниже по иерархии является самостоятельным в выполнении своей задачи ИНСТРУМЕНТОМ для того, кто выше: Кнопка должна уметь "нажиматься", Меню должно уметь предоставить выбор, тот кто создал меню — знать что делать с выбором. Это называется иерархия. Тот, кто ниже, обычно извещает того кто выше — своего создателя — о происходящих в нем изменениях, но РЕШЕНИЯ принимает только в своей области ответственности. То есть внутри Кнопки не содержится кода, запускающего игру. И в Меню его не содержится. Меню не запускает игру, это не его ответственность.
__________________
Reality.getBounds(this);

Старый 19.09.2017, 19:02
Appleman вне форума Посмотреть профиль Отправить личное сообщение для Appleman Найти все сообщения от Appleman
  № 18  
Ответить с цитированием
Appleman
 
Аватар для Appleman

Регистрация: Dec 2014
Адрес: Санкт-Петербург
Сообщений: 479
Wolsh, спасибо. Исчерпывающе. Даже спросить больше нечего, только идти и пробовать

Мини-уточнение. Насколько я понимаю, все утилитарные функции, связанные с выводом (например, полная очистка экрана), делегируются классу View и реализуются через его соответствующие методы, верно?

Старый 19.09.2017, 20:29
undefined вне форума Посмотреть профиль Отправить личное сообщение для undefined Найти все сообщения от undefined
  № 19  
Ответить с цитированием
undefined

Регистрация: Oct 2006
Сообщений: 2,281
Цитата:
Мини-уточнение. Насколько я понимаю, все утилитарные функции, связанные с выводом (например, полная очистка экрана), делегируются классу View и реализуются через его соответствующие методы, верно?
Еще раз: за рисование отвечает flash runtime никакие очистки/перерисовки экрана не требуются.Если хочется очистить всю сцену- просто отцепляешь от нее все display objects.
Цитата:
только идти и пробовать
золотые слова.

Старый 19.09.2017, 23:17
Appleman вне форума Посмотреть профиль Отправить личное сообщение для Appleman Найти все сообщения от Appleman
  № 20  
Ответить с цитированием
Appleman
 
Аватар для Appleman

Регистрация: Dec 2014
Адрес: Санкт-Петербург
Сообщений: 479
Цитата:
Еще раз: за рисование отвечает flash runtime никакие очистки/перерисовки экрана не требуются.Если хочется очистить всю сцену- просто отцепляешь от нее все display objects.
Я это и имею в виду. Функцию по уборке компонентов из DOC нужно реализовывать в том классе, где корневой DOС и находится.

Создать новую тему Ответ Часовой пояс GMT +4, время: 08:53.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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