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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 12.04.2013, 22:50
zzSpirit вне форума Посмотреть профиль Отправить личное сообщение для zzSpirit Найти все сообщения от zzSpirit
  № 21  
Ответить с цитированием
zzSpirit
 
Аватар для zzSpirit

Регистрация: Jan 2013
Адрес: Москва, Сходня
Сообщений: 41
Ну, добавлять на сцену я буду все в главном классе, как положено.
Но к примеру у меня есть класс VK - синглтон, где используется конструкция stage.loaderInfo.parameters, в этот класс я передаю ссылку на Main, думал сделать так чтобы не передавать ссылку, а обращаться просто: main.stage.loaderInfo.parameters - но понял теперь что это нарушает ООП принципы, кароче самое правильное ссылкой как я понял.

Добавлено через 1 минуту
Цитата:
Сообщение от Wolsh Посмотреть сообщение
p.S. за stage.addChild() я бы расстреливал без компенсации.
Имеется ввиду, если написать так в главном классе вместо просто addChild()?

Добавлено через 3 минуты
Цитата:
Сообщение от caseyryan Посмотреть сообщение
У автора наверное была конструкция типа этой:
Код AS3:
public static var MAIN:Main = this;
Само собой это работать не будет. Во время вызова статического инициализатора, экземпляра еще не существует. Соответственно сразу на this сослаться нельзя. Но можно в конструкторе произвести присвоение.
Да, именно так и было. Спасибо, помогло.

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Цитата:
Имеется ввиду, если написать так в главном классе вместо просто addChild()?
На stage должен находиться только один объект — экземпляр Документ-класса. Он является Вашим приложением. И он контейнер (не может не быть контейнером). Все, что создается приложением, должно находиться в контейнере приложения, а не шляться где-то за его пределами.
Сама по себе запись stage.addChild() является командой от потомка родителю, что так же недопустимо. Потомок не должен вызывать методы родителя напрямую. Если родитель желает слышать голос ребенка, он подписывается на события от него и сам решает, что делать когда события приходят. Но ребенок никогда не должен принимать решения за родителя и делать что-то "от его имени". Приложение без иерархии превращается в бардак, а классы, желающие управлять своими родителями, непригодны для повторного использования в других проектах. Классы, выбрасывающие своих детей на Stage — тем более.
Многие используют этот трюк для добавления всплывающих окон и подсказок (а когда-то и курсоров), вместо того чтобы просто создать структуру глубины с помощью контейнеров-"слоев" в документ-классе. Это не более чем безалаберность и лень. Не делайте так. Не понимайте слова "добавить на стейдж" буквально. Это всегда подразумевает "добавить в список отображения". Stage — это плеер. И в плеере должен показываться только один объект — Ваше приложение. И все его дети должны находиться в ЕГО списке отображения.
__________________
Reality.getBounds(this);

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

Регистрация: Jan 2013
Адрес: Москва, Сходня
Сообщений: 41
Огромное спасибо, Wolsh! Теперь все понятно!

Старый 13.04.2013, 01:31
СлаваRa вне форума Посмотреть профиль Отправить личное сообщение для СлаваRa Найти все сообщения от СлаваRa
  № 24  
Ответить с цитированием
СлаваRa
 
Аватар для СлаваRa

блогер
Регистрация: Feb 2008
Адрес: http://playtika.com
Сообщений: 1,119
Записей в блоге: 5
Отправить сообщение для СлаваRa с помощью ICQ Отправить сообщение для СлаваRa с помощью Skype™
на самом деле, дела с этим обстоят очень плохо, огромное кол-во программистов использует этот подход в промышленных масштабах... а потом, долго-долго решают проблемы... другая доля программистов не понимает, что Stage один.
Открываешь проект и видишь StageHelper.instance.activeStage, что-то-там.removeFromParent() и т.д.,.. я до сих пор не могу понять, почему\зачем люди так хотят создать себе проблем.
__________________
местонахождение

Старый 13.04.2013, 02:17
semenyakinVS вне форума Посмотреть профиль Отправить личное сообщение для semenyakinVS Найти все сообщения от semenyakinVS
  № 25  
Ответить с цитированием
semenyakinVS

Регистрация: Mar 2010
Сообщений: 137
Цитата:
Если родитель желает слышать голос ребенка, он подписывается на события от него и сам решает, что делать когда события приходят.
Wolsh, спасибо за инфу по поводу синглтона. Задумался и пошёл шерстить свой код на предмет подобных случаев.

Цитата:
Main.instance
А где здесь нарушение инкапсуляции? Или это не вызов property (геттера), а получение указателя на статическую структуру (тогда да, тогда нарушение) ?

Старый 13.04.2013, 05:55
СлаваRa вне форума Посмотреть профиль Отправить личное сообщение для СлаваRa Найти все сообщения от СлаваRa
  № 26  
Ответить с цитированием
СлаваRa
 
Аватар для СлаваRa

блогер
Регистрация: Feb 2008
Адрес: http://playtika.com
Сообщений: 1,119
Записей в блоге: 5
Отправить сообщение для СлаваRa с помощью ICQ Отправить сообщение для СлаваRa с помощью Skype™
какого фига main кому в "дереве" своей программы должен быть доступен? или должен отдавать свое? ну правда, а?

если так, любой сможет расшатать логику программы.. отловить это будет крайне сложно(
__________________
местонахождение

Старый 13.04.2013, 06:05
zzSpirit вне форума Посмотреть профиль Отправить личное сообщение для zzSpirit Найти все сообщения от zzSpirit
  № 27  
Ответить с цитированием
zzSpirit
 
Аватар для zzSpirit

Регистрация: Jan 2013
Адрес: Москва, Сходня
Сообщений: 41
Цитата:
Сообщение от СлаваRa Посмотреть сообщение
какого фига main кому в "дереве" своей программы должен быть доступен? или должен отдавать свое? ну правда, а?
что ты имеешь ввиду под "отдавать свое"? то, что он передает ссылку на самого себя или что-то другое?

Старый 13.04.2013, 10:06
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 28  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,600
Записей в блоге: 17
Цитата:
Ни одни здравомыслящий программист , понимающий принципы ООП, знающий , что такое инкапсуляция и т.п. - не напишет даже так Main.variable .
Какое бы вы приложение не писали, простое или сложно, у вас всегда есть ОСНОВНОЙ вид и ГЛАВНЫЙ контроллер, который хранит ссылку на _host
Моих тем про MVC перечитал?
Да, действительно, так делать правильно в ряде случаев. Но главная мысль в любом приложении с отделенными частями логики – пусть данные не лезут в отображение напрямую.
К слову, интересен обмен опытом: чем для тебя фатальны статические ссылки?

По сабжу: запомните раз и навсегда. Синглтон – это только возможность создания одного экземпляра. В контексте флеша stage – это синглтон. Но к нему нету повсеместно глобального доступа.
Сколько раз создается Main (подразумеваю, что Main - base class). Один. Этот экземпляр создаёт флешплеер при запуске флешки. Если требуется вызвать где–то
Код:
new Main
явно – то это действительно плохо. Ну серьезно, приложение которое создаёт само себя внутри себя...

Так что мой ответ: да, делать базовый класс синглтоном – правильно. Но он настолько очевидно-синглтон, что можно не тратить времени на реализации заглушек, чтобы второй раз его не создали. И нет, синглтон и глобальный доступ – это рядом стоящее, но совсем не одно и то же.

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
На stage должен находиться только один объект — экземпляр Документ-класса. Он является Вашим приложением. И он контейнер (не может не быть контейнером). Все, что создается приложением, должно находиться в контейнере приложения, а не шляться где-то за его пределами.
Можно конечно и документ класс использовать для этого (теоритически), но лично я не вижу ничего плохого в том, чтобы различные модальные окна добавлялись на stage.
У меня часто в приложениях присутствуют менеджеры модальных окон, которые инициализируются на stage. При вызове какого-то статического метода, типа addWarningWindow(title:String) на стейдж добавляется окно, а на фон сразу под ним добавляется спрайт с прозрачной заливкой со сторонаями равными stageWidth, stageHeight, чтобы перекрыть клики. Окна полностью автономны, и приложение не имеет каких либо других ссылок на них. Так вот, почему stage а не документ класс, опять же из-за размеров спрайта заливки. Не от документ класса же получать ширину и высоту этой заливки.

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Поверх всего лежит контейнер для модальных окон. Менеджер имеет ссылку на него, а контейнер, естественно, имеет ссылку на стейдж и знает его размеры. В чем же проблема?
Экран затемнения уж тем более так просто написать отдельным классом, который достаточно кинуть в список отображения и он, автоматически получив ссылку на стейдж, закрасит нужную область. Другое дело с центрированием модальных окон — некрасиво, когда ребенок сам задает свои координаты в родителе. Но тут уж, как говорится, смотри п.1. Контейнер для размещения окна знает стейдж и его размеры.
Если я проглядел/не понял проблему, объясните на пальцах.
__________________
Reality.getBounds(this);

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

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

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


 


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


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