Просмотр полной версии : Когда надо использовать _root
Объясните пожалуйста, когда надо использовать _root ? а то я действую по принципу не идёт без _root. , значит ставиm _root.
ну а вообще, когда его надо использовать по правилам ?
Тогда можете объяснить, почему без _root. я не могу присвоить координаты MovieClip'у ?
Тогда можете объяснить, почему без _root. я не могу присвоить координаты MovieClip'у ?
Причем тут _root и мувиклип? Вы хотите руту задать координаты? Сильно, однако.
screamge
02.12.2007, 01:42
Использование рут является плохой практикой, для работы с объектами вовсе не обязательно использовать рут.
__etc я просто привёл пример =)
ну вот допустим у меня есть movieclip asd
onClipEvent(enterFrame)
{
asd._x=100;
} не идёт , если
onClipEvent(enterFrame)
{
_root.asd._x=100;
}
Всё прекрасно работает =\
DarkLight
02.12.2007, 05:13
1) onClipEvent не используйте вообще! Это не рекомендуется делать уже 7(!!!) лет. Хорошо хоть в AS3 его убрали...
2) Область видимости в onClipEvent - сам клип, в отличии от on() - где материнский, поэтому в первом случае Вы обращаетесь к asd.asd, которого не существует, и код не имеет смысла.
CrazyFlasher
02.12.2007, 15:12
юзаю в следующих вещах:
1. Когда создаю главный класс.
Например:
var engine:Engine = new Engine(_root,...);
в дальнейшем ссылаюсь на _root с помощью какого-нить мувика (хотя вместо _root можно передать любой другой контейнер)
2. Когда работаю с мышкой
1. Лучше писать this в рутовой сцене, потом сохранить ссылку в стат. свойстве и во втором пункте больше не использовать _root.
Тоесть, тогда надо юзать onEnterFrame = function() { } ?
CrazyFlasher
02.12.2007, 15:59
1. ага...использую this который ссылается на рут.
2. а почему здесь рут не уместен? мне нужно отловить "глобальные" координаты мышки из любого контейнера
2 Dr.XxX:
var mc:MovieClip = this;
mc.onEnterFrame = function() { }
chingachgoog
02.12.2007, 16:21
И _root и onClipEvent вполне нужные вещи, просто надо знать, что они делают и как. В данном случае, как правильно сказал DarkLight дело совсем в другом - в области видимости.
onClipEvent не нужен вообще, если вы работаете с 6-м плеером и выше. Оправданий ему нет.
А вот _root порой необходим, но только для абсолютных вещей, таких координаты мыши в целом и flashvars.
CrazyFlasher
02.12.2007, 16:27
ну и наверное при работе с мышкой он тоже не заменим? или я ошибаюсь?
Я опечатался, хотел мыши написать, а написал ролика.
Но суть в другом, _root нельзя использовать там, где может, даже если вы и не планируете это сейчас, меняться вложенность объекта который использует этот код или код на него ссылается.
CrazyFlasher
02.12.2007, 16:42
солидарен с iNils'ом :)
chingachgoog
02.12.2007, 17:42
Например у onClipEvent есть интересная особенность - он не исчезает, когда в контейнер, на котором он висит, загружают другой мувик.
И это не единственная польза.
Также и рут - есть локрут и пр., что позволяет его оправданно использовать.
Например у onClipEvent есть интересная особенность - он не исчезает, когда в контейнер, на котором он висит, загружают другой мувик.О, круто! Только все уже давно делают пустые контейнеры и не пишут код на клипах и в кадрах.
И это не единственная польза.Это была единственная его польза.
Также и рут - есть локрут и пр., что позволяет его оправданно использовать.Я выше описал, когда нужен рут, а все остальные случаи и _loсkroot являются попыткой оправдать свои огрехи.
chingachgoog
02.12.2007, 20:07
О, круто! Только все уже давно делают пустые контейнеры и не пишут код на клипах и в кадрах.
Почему круто? Как раз не круто и не модно - модно убить 5 минут на описание того, что руками делать 5 секунд.
Я выше описал, когда нужен рут, а все остальные случаи и _loсkroot являются попыткой оправдать свои огрехи.
ООП - это как раз и есть частный случай, а реальных случаев, когда проще использовать _root гораздо больше.
chingachgoog, если вы работает с баннерами или вы хотите ориентироваться на уровень начинающих это ваши проблемы, остальные уже из этого вышли.
И время от времени мне попадаются задачи "там все уже сделано, нужно только прикрутить к движку". А потом выясняется, что везде стоял _root, и где надо и где не надо, а что бы поправить надо облазить 100 клипов.
Я флешом начал заниматься с 4-ой версии, когда код писали на клипах, а классов не было и в помине, и знаю о чем говорю, так как прошел все стадии его развития.
chingachgoog
02.12.2007, 21:14
chingachgoog, если вы работает с баннерами или вы хотите ориентироваться на уровень начинающих это ваши проблемы, остальные уже из этого вышли.
Да мне все равно, что "круто", а что "уровень начинающего". Если для конкретной задачи требуется написать this._parent._parent._parent или просто _root, то я выберу то, что быстрее, а не то что круче.
И время от времени мне попадаются задачи "там все уже сделано, нужно только прикрутить к движку". А потом выясняется, что везде стоял _root, и где надо и где не надо
Почему где "не надо"? Все же работало? А то, что клиент потом захотел сделать - его проблемы (скорее всего просто не дал времени на начальный проект достаточного)
а что бы поправить надо облазить 100 клипов.
Так за то деньги и платят. А что, автор должен был облегчить жизнь iNils и усложнить себе? :-)
DarkLight
02.12.2007, 21:23
Так за то деньги и платят. А что, автор должен был облегчить жизнь iNils и усложнить себе? :-)
За прикрутку платят мало, т к при нормально написанном коде трудозатраты действительно малы. А реально получается много работы. И поверьте, каждый раз прописывать полный путь - себе же хуже.
На мой взгляд, без _root можно и нужно обходится. У меня не было ни единой причины, по которой я не могу быть без него.
Да мне все равно, что "круто", а что "уровень начинающего". Если для конкретной задачи требуется написать this._parent._parent._parent или просто _root, то я выберу то, что быстрее, а не то что круче.Есть правильно и не правильно, вы пишите не правильно. Это ваше личное дело, до тех пор, пока вы не начинаете учить этому других.
†‡Paladin‡†
02.12.2007, 21:36
За прикрутку платят мало, т к при нормально написанном коде трудозатраты действительно малы. А реально получается много работы. И поверьте, каждый раз прописывать полный путь - себе же хуже.
В твоих силах отказаться от работы или нахначить свою цену.
Рут действительно ненужен.
chingachgoog
02.12.2007, 21:43
Есть правильно и не правильно, вы пишите не правильно. Это ваше личное дело, до тех пор, пока вы не начинаете учить этому других.
_root и onClipEvent есть в Action Script? Есть.
Вот собственно и весь вопрос: что это такое и как пользоваться. Ответ "не нужны и точка" и "это не круто" - на мой взляд как раз не годятся для обучения других.
DarkLight
02.12.2007, 21:46
В твоих силах отказаться от работы или нахначить свою цену.
Собственно, я такой работой уже давно и не занимаюсь:)
_root и onClipEvent есть в Action Script? Есть.
Вот собственно и весь вопрос: что это такое и как пользоваться. Ответ "не нужны и точка" и "это не круто" - на мой взляд как раз не годятся для обучения других.Лишь для обратной совместимости. И вы занимаетеь подлогом, я ни где не писал слово круто, это вы придумали, чтобы оправдать свою теорию. Я говорил о "правильно" и "неправильно". Все, остальное отговорки. Либо вы профессионал и учите писать других правильно, либо вы любитель и оказываете другим медвежью услугу своими быстрыми способами. Потому что, потом, воспользовавшись вашим советом, кто то не сможет сделать работу, из-за того, что этот способ учитывал только текущую задачу и он потратит в 3-4 раза больше времени на выяснение причин, чем на написание правильного кода сразу.
Не верите? Каждый день приходят люди с "быстрыми" исходниками и просят помочь разобраться, почему они не работают, когда меняют уровень вложенности. Или когда они пишут на куждую кнопку свой код и при нахождении ошибки, они опять ходят по всем своим 100 кнопкам, и правят там код, а потом еще раз. И все потому, что быстрее было написать код на клипе.
В твоих силах отказаться от работы или нахначить свою цену.
Случай: я писал оболочку, которая подгружала модули, а их писали сторонние разработчики. Я свою часть закончил и отдал заказчику. Он запускает у себя и часть подгружаемых модулей не работает. B он сразу ко мне, раз модули сами по себе работаю, значит виноват я.
То есть, я работу уже сделал, но деньги не могу полчить, так вроде моя часть не работает.
А причина была в том, что разработчики использовал _root (им так было проще и быстрее писать). Мы с этим разобрались и стали использовать _lockroot. Но тут вылезает другая проблема. Оболочка использовала конвейер, который позволял выполнять различные действия одного за другим, согласно задайной последовательности. Эта последовательность легко править и она довольно гибкая, что помогает существенно сократить время на кодирование (соответсвенно и оплата была заложена исходя из этого). Конвейер вызывал методы объектов через apply (так как конвейр описывается до запуска, многие объекты еще не созданы и дать ссылку на их методы невозможно. Кстати в классе Tween, свойства для твина задаются стрингом по этой причине, но в отличие от свойств, в методы надо передавать произовльное количество аргументов), но при _lockroot и попытки выгрузить содержимое клипа, флеш воспринимал unloadMovie, как глобальную функцию, а не метод класса MovieClip и в результате выгружал абсолютно все.
В результате, было потрачено гораздо больше времени, чем планировалось.
†‡Paladin‡†
02.12.2007, 22:39
iNils согласен - проследить все варианты не представляется возможным. Как выход брать время и деньги с запасом. Один фиг цена на флэш сейчас плавает от 10 до 10000 баксов и помоему никто незнает что сколько должно стоить =)
Это был декабрь и новогодний проект, тут запаса по времени нет :D
А сколько должна стоить стрижка? Почему в одной парикмахерской цена одна, в другой другая, а с выездом мастера на дом третья? А можно вообще жену, соседку научить стричь или вообще самому наголо.
Freeeeeeeman
02.12.2007, 23:20
Я всё ёщё пользуюсь _root и onClipEvent, с классами начал разбираться только сегодня, хочу переучиться, подскажите учебник, желательно в цивровом виде и с сылочкой:rolleyes: .
сбасиб.
chingachgoog
02.12.2007, 23:31
Лишь для обратной совместимости.
Надеюсь это не так.
И вы занимаетеь подлогом, я ни где не писал слово круто, это вы придумали, чтобы оправдать свою теорию.
Вообще именно вы в посте №20 (http://flasher.ru/forum/showpost.php?p=699972&postcount=20) его написали, хотя дальше я конечно развил мысль самостоятельно (и кстати не писал, что это вы так именно говорили).
Я говорил о "правильно" и "неправильно". Все, остальное отговорки. Либо вы профессионал и учите писать других правильно
Правильно - это сделать работу быстро и без ошибок, по возможности предусмотреть - не придется ли ее САМОМУ переделывать?
Потому что, потом, воспользовавшись вашим советом, кто то не сможет сделать работу, из-за того, что этот способ учитывал только текущую задачу и он потратит в 3-4 раза больше времени на выяснение причин, чем на написание правильного кода сразу.
Не верите? Каждый день приходят люди с "быстрыми" исходниками и просят помочь разобраться, почему они не работают, когда меняют уровень вложенности.
Вот именно про это я и говорю: дело не в _root, а в понимании уровней вложенности. А тем кто приходит и _parent не поможет, случись поменять его на _parent._parent (в то время как _root будет пахать).
И медвежья услуга тут как раз в том, что без разбора сразу дается императив: про _root забыть.
Или когда они пишут на куждую кнопку свой код и при нахождении ошибки, они опять ходят по всем своим 100 кнопкам, и правят там код, а потом еще раз. И все потому, что быстрее было написать код на клипе.
Не, они просто по-другому не умеют. А вот когда есть выбор из нескольких способов они выберут действительно более быстрый.
Надеюсь это не так.Так, в AS3 этого нет.
Вообще именно вы в посте №20 (http://flasher.ru/forum/showpost.php?p=699972&postcount=20) его написали, хотя дальше я конечно развил мысль самостоятельно (и кстати не писал, что это вы так именно говорили).Это была эмоция :D С таким же успехом там могло быть Здорово, Замечательно, Великолепно.
Правильно - это сделать работу быстро и без ошибокНет. Мы говорим о написании кода, а не о результате. Вы можете писать правильно и неправильно и будет все равно работать. Только второй путь развития тупиковый. Это только кажетс, что быстрее, как только вы набиваете себе руку, и у вас отлаженная схема работы, писать становится даже быстрееИ медвежья услуга тут как раз в том, что без разбора сразу дается императив: про _root забыть.И правильно делают.
chingachgoog
03.12.2007, 00:30
Так, в AS3 этого нет.
Это ни о чем не говорит.
И правильно делают.
Я все же сторонник теории образования, где объясняют ПОЧЕМУ (запамятовал научный термин :) ), а не учат КАК, а следоательно за полную информацию.
Я все же сторонник теории образования, где объясняют ПОЧЕМУ (запамятовал научный термин :) ), а не учат КАК, а следоательно за полную информацию.Купите книжку.
chingachgoog
03.12.2007, 01:19
Это был не вопрос :)
_root может ссылаться совершенно не туда, куда планировал. Строить на нем приложение очень шатко.
Добалю немного и от себя =)
_root практично использовать иногда, когда
- нужно узнать координаты мыши
- нужно получить значения FleshVars
- нужно запихать клип на самый верхний слой, а количество слоев не известно и вариативно.
Чего НЕ нужно делать с _root:
- хранить там переменные
- ссылаться на него для получения пути к клипу
- переопределять его свойства (_x, _y, _rotation и т.д.)
Что же до быстроты работы, вот, пример прям с конвеера %)
Пишу большой, даж по моим меркам очень большой проект... чуть ли не афтерэффект на флеше =) Со мной работает девочка-дизайнер, не в обиду женскому полу, но девочка познаниями не блещет =) Но, сам я еще и анимашки делать не буду, вот, ей и отдал... Буквально сегодня нужно было их как-то прикрутить к моему проекту. Ну, я за работу - а там чего-то не ладится... Открываю исходники, и OMG! что я там вижу! =)
что-то типа setProperty("/ball" add random(5), "_x"){....} Прослезился, поматюкался... но завтра по Нью-Йоркскому времени часа в 3 должна быть встреча с MySpace %) И надо им показывать =)
Вобщем, разбираться чего там да как времени нет абсолютно - исправил как сумел (мало того, что все компайлилось под 4-й плеер, так еще и с ошибками)... _root не _root, onClipEvent... тут уже хоть как-то все в кучу собрать... все равно вовнуть никто лезть не будет =)
ЗЫ. Зато что поразило, офигенная (модераторы, простите) обратная совместимость! Код под 4-ку и отредактировался, и скомпилировался, и работает в итоге и в CS3! %)
CrazyFlasher
03.12.2007, 02:00
конструкции типа такого:
/myMc:myvar - компилиться не будут под новый плеер
Не, ну понятно, кто бы спорил, оно все равно все модульное. Ну откомпайлил ее часть под 4-ку, свое - под 9-ку, загрузил в проект ее анимашки - и один и тот же плеер без глюков воспроизвел и то и другое! %)
ЗЫ. Мне как-то на днях кто-то приносил древний фотошопный файл мы так и не выяснили, какой версии %) не открылся %)
Ну учитывая, что FP9 имеет AVM1 и AVM2, это совсем не странно.
wvxvw, все три варианта практичности вредны. Во все этих вариантах можно обойтись без _root.
Нет, это просто по-человечески очень приятно, никто ведь их не заставлял реализовывать поддержку каких-то ископаемых версий, и все-таки =)
CrazyFlasher
03.12.2007, 02:12
Flash lite 1.1 не является ископаемым, однако идентичен Flash 4-ому. Видать одна из причин почему сделали поддержку
Нет, это просто по-человечески очень приятно, никто ведь их не заставлял реализовывать поддержку каких-то ископаемых версий, и все-таки =)Чтобы дать лишний плюс сильверлайту?:) Представте, когда добрая часть флешек в инете, вдруг перестанут работать?
CrazyFlasher
03.12.2007, 02:16
не, я так понял, что wvxvw удивился тому, что в одном окне плеера работает одновременно флэшка скомилиная под 8-9 плеер и загружает в себя флэшку 4-го.
wvxvw, все три варианта практичности вредны. Во все этих вариантах можно обойтись без _root.
Ну, тут я вынужден не согласится.
FlashVars появляется в корне, либо в текстовом поле с присвоенной ему переменной (архаизм тот еще). Откуда их брать тогда прикажешь?
(ExternalInterface не предлагать, мелкомягкие постарались, млин, .NET когда генерит страницы с формами, а она генерит их только так, в упор не может достучаться до ExternalInterface) Реалии нашего рынка таковы, что на .NETе пишут 90% всех веб-программеров... Да и вообще, варианты типа строить классы только для того, чтобы инициализировать флешку, как по мне избыточны.
Получить координаты мыша, ну, хотябы для создания псевдо-курсора через _root._xmouse - просто самый быстрый вариант, можно, конечно же делать и по-другому, но так гораздо быстрее, и никому не мешает =)
Да, есть DepthManager, делает он ровно точно то же самое, что и _root.getNextHighestDepth() только более замысловатым способом. Можно еще извратится, и самому глубины считать - но, это еще более бессмысленно (их уже посчитали, и дали хорошо работающий API к этому, зачем изобретать велосипед?)
Чтобы дать лишний плюс сильверлайту?:) Представте, когда добрая часть флешек в инете, вдруг перестанут работать?
Сильверлайт должен умереть вместе со всеми кривыми потомками дот-Нета %) я за Адоби %) :yahoo:
wvxvw, все это я говорил на первых страницах :)
wvxvw, у меня есть класс ExternalData для flashvars. Там никакого упоминания о _root. Для отлова глобальных координат можно сохранить ссылку на настоящий рут и положить в статическое поле.
Нельзя допускать ситуаций, описанных iNils-ом.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.