Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Когда надо использовать _root (http://www.flasher.ru/forum/showthread.php?t=104754)

Dr.XxX 01.12.2007 23:16

Когда надо использовать _root
 
Объясните пожалуйста, когда надо использовать _root ? а то я действую по принципу не идёт без _root. , значит ставиm _root.

etc 01.12.2007 23:39

Никогда не юзаем.

Dr.XxX 01.12.2007 23:57

ну а вообще, когда его надо использовать по правилам ?

etc 02.12.2007 00:04

Никогда.

Dr.XxX 02.12.2007 00:28

Тогда можете объяснить, почему без _root. я не могу присвоить координаты MovieClip'у ?

etc 02.12.2007 00:48

Цитата:

Сообщение от Dr.XxX
Тогда можете объяснить, почему без _root. я не могу присвоить координаты MovieClip'у ?

Причем тут _root и мувиклип? Вы хотите руту задать координаты? Сильно, однако.

screamge 02.12.2007 01:42

Использование рут является плохой практикой, для работы с объектами вовсе не обязательно использовать рут.

Dr.XxX 02.12.2007 04:35

__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. Когда работаю с мышкой

etc 02.12.2007 15:47

1. Лучше писать this в рутовой сцене, потом сохранить ссылку в стат. свойстве и во втором пункте больше не использовать _root.

Dr.XxX 02.12.2007 15:54

Тоесть, тогда надо юзать 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 дело совсем в другом - в области видимости.

iNils 02.12.2007 16:25

onClipEvent не нужен вообще, если вы работаете с 6-м плеером и выше. Оправданий ему нет.
А вот _root порой необходим, но только для абсолютных вещей, таких координаты мыши в целом и flashvars.

CrazyFlasher 02.12.2007 16:27

ну и наверное при работе с мышкой он тоже не заменим? или я ошибаюсь?

iNils 02.12.2007 16:33

Я опечатался, хотел мыши написать, а написал ролика.
Но суть в другом, _root нельзя использовать там, где может, даже если вы и не планируете это сейчас, меняться вложенность объекта который использует этот код или код на него ссылается.

CrazyFlasher 02.12.2007 16:42

солидарен с iNils'ом :)

chingachgoog 02.12.2007 17:42

Например у onClipEvent есть интересная особенность - он не исчезает, когда в контейнер, на котором он висит, загружают другой мувик.
И это не единственная польза.
Также и рут - есть локрут и пр., что позволяет его оправданно использовать.

iNils 02.12.2007 17:46

Цитата:

Сообщение от chingachgoog
Например у onClipEvent есть интересная особенность - он не исчезает, когда в контейнер, на котором он висит, загружают другой мувик.

О, круто! Только все уже давно делают пустые контейнеры и не пишут код на клипах и в кадрах.
Цитата:

Сообщение от chingachgoog
И это не единственная польза.

Это была единственная его польза.
Цитата:

Сообщение от chingachgoog
Также и рут - есть локрут и пр., что позволяет его оправданно использовать.

Я выше описал, когда нужен рут, а все остальные случаи и _loсkroot являются попыткой оправдать свои огрехи.

chingachgoog 02.12.2007 20:07

Цитата:

Сообщение от iNils
О, круто! Только все уже давно делают пустые контейнеры и не пишут код на клипах и в кадрах.

Почему круто? Как раз не круто и не модно - модно убить 5 минут на описание того, что руками делать 5 секунд.

Цитата:

Сообщение от iNils
Я выше описал, когда нужен рут, а все остальные случаи и _loсkroot являются попыткой оправдать свои огрехи.

ООП - это как раз и есть частный случай, а реальных случаев, когда проще использовать _root гораздо больше.

iNils 02.12.2007 20:17

chingachgoog, если вы работает с баннерами или вы хотите ориентироваться на уровень начинающих это ваши проблемы, остальные уже из этого вышли.
И время от времени мне попадаются задачи "там все уже сделано, нужно только прикрутить к движку". А потом выясняется, что везде стоял _root, и где надо и где не надо, а что бы поправить надо облазить 100 клипов.
Я флешом начал заниматься с 4-ой версии, когда код писали на клипах, а классов не было и в помине, и знаю о чем говорю, так как прошел все стадии его развития.

chingachgoog 02.12.2007 21:14

Цитата:

Сообщение от iNils
chingachgoog, если вы работает с баннерами или вы хотите ориентироваться на уровень начинающих это ваши проблемы, остальные уже из этого вышли.

Да мне все равно, что "круто", а что "уровень начинающего". Если для конкретной задачи требуется написать this._parent._parent._parent или просто _root, то я выберу то, что быстрее, а не то что круче.

Цитата:

Сообщение от iNils
И время от времени мне попадаются задачи "там все уже сделано, нужно только прикрутить к движку". А потом выясняется, что везде стоял _root, и где надо и где не надо

Почему где "не надо"? Все же работало? А то, что клиент потом захотел сделать - его проблемы (скорее всего просто не дал времени на начальный проект достаточного)

Цитата:

Сообщение от iNils
а что бы поправить надо облазить 100 клипов.

Так за то деньги и платят. А что, автор должен был облегчить жизнь iNils и усложнить себе? :-)

DarkLight 02.12.2007 21:23

Цитата:

Сообщение от chingachgoog
Так за то деньги и платят. А что, автор должен был облегчить жизнь iNils и усложнить себе? :-)

За прикрутку платят мало, т к при нормально написанном коде трудозатраты действительно малы. А реально получается много работы. И поверьте, каждый раз прописывать полный путь - себе же хуже.

etc 02.12.2007 21:25

На мой взгляд, без _root можно и нужно обходится. У меня не было ни единой причины, по которой я не могу быть без него.

iNils 02.12.2007 21:34

Цитата:

Сообщение от chingachgoog
Да мне все равно, что "круто", а что "уровень начинающего". Если для конкретной задачи требуется написать this._parent._parent._parent или просто _root, то я выберу то, что быстрее, а не то что круче.

Есть правильно и не правильно, вы пишите не правильно. Это ваше личное дело, до тех пор, пока вы не начинаете учить этому других.

†‡Paladin‡† 02.12.2007 21:36

Цитата:

Сообщение от DarkLight
За прикрутку платят мало, т к при нормально написанном коде трудозатраты действительно малы. А реально получается много работы. И поверьте, каждый раз прописывать полный путь - себе же хуже.

В твоих силах отказаться от работы или нахначить свою цену.
Рут действительно ненужен.

chingachgoog 02.12.2007 21:43

Цитата:

Сообщение от iNils
Есть правильно и не правильно, вы пишите не правильно. Это ваше личное дело, до тех пор, пока вы не начинаете учить этому других.

_root и onClipEvent есть в Action Script? Есть.
Вот собственно и весь вопрос: что это такое и как пользоваться. Ответ "не нужны и точка" и "это не круто" - на мой взляд как раз не годятся для обучения других.

DarkLight 02.12.2007 21:46

Цитата:

Сообщение от †‡Paladin‡†
В твоих силах отказаться от работы или нахначить свою цену.

Собственно, я такой работой уже давно и не занимаюсь:)

iNils 02.12.2007 22:17

Цитата:

Сообщение от chingachgoog
_root и onClipEvent есть в Action Script? Есть.
Вот собственно и весь вопрос: что это такое и как пользоваться. Ответ "не нужны и точка" и "это не круто" - на мой взляд как раз не годятся для обучения других.

Лишь для обратной совместимости. И вы занимаетеь подлогом, я ни где не писал слово круто, это вы придумали, чтобы оправдать свою теорию. Я говорил о "правильно" и "неправильно". Все, остальное отговорки. Либо вы профессионал и учите писать других правильно, либо вы любитель и оказываете другим медвежью услугу своими быстрыми способами. Потому что, потом, воспользовавшись вашим советом, кто то не сможет сделать работу, из-за того, что этот способ учитывал только текущую задачу и он потратит в 3-4 раза больше времени на выяснение причин, чем на написание правильного кода сразу.
Не верите? Каждый день приходят люди с "быстрыми" исходниками и просят помочь разобраться, почему они не работают, когда меняют уровень вложенности. Или когда они пишут на куждую кнопку свой код и при нахождении ошибки, они опять ходят по всем своим 100 кнопкам, и правят там код, а потом еще раз. И все потому, что быстрее было написать код на клипе.

Цитата:

Сообщение от †‡Paladin‡†
В твоих силах отказаться от работы или нахначить свою цену.

Случай: я писал оболочку, которая подгружала модули, а их писали сторонние разработчики. Я свою часть закончил и отдал заказчику. Он запускает у себя и часть подгружаемых модулей не работает. B он сразу ко мне, раз модули сами по себе работаю, значит виноват я.
То есть, я работу уже сделал, но деньги не могу полчить, так вроде моя часть не работает.
А причина была в том, что разработчики использовал _root (им так было проще и быстрее писать). Мы с этим разобрались и стали использовать _lockroot. Но тут вылезает другая проблема. Оболочка использовала конвейер, который позволял выполнять различные действия одного за другим, согласно задайной последовательности. Эта последовательность легко править и она довольно гибкая, что помогает существенно сократить время на кодирование (соответсвенно и оплата была заложена исходя из этого). Конвейер вызывал методы объектов через apply (так как конвейр описывается до запуска, многие объекты еще не созданы и дать ссылку на их методы невозможно. Кстати в классе Tween, свойства для твина задаются стрингом по этой причине, но в отличие от свойств, в методы надо передавать произовльное количество аргументов), но при _lockroot и попытки выгрузить содержимое клипа, флеш воспринимал unloadMovie, как глобальную функцию, а не метод класса MovieClip и в результате выгружал абсолютно все.
В результате, было потрачено гораздо больше времени, чем планировалось.

†‡Paladin‡† 02.12.2007 22:39

iNils согласен - проследить все варианты не представляется возможным. Как выход брать время и деньги с запасом. Один фиг цена на флэш сейчас плавает от 10 до 10000 баксов и помоему никто незнает что сколько должно стоить =)

iNils 02.12.2007 22:52

Это был декабрь и новогодний проект, тут запаса по времени нет :D

А сколько должна стоить стрижка? Почему в одной парикмахерской цена одна, в другой другая, а с выездом мастера на дом третья? А можно вообще жену, соседку научить стричь или вообще самому наголо.

Freeeeeeeman 02.12.2007 23:20

Я всё ёщё пользуюсь _root и onClipEvent, с классами начал разбираться только сегодня, хочу переучиться, подскажите учебник, желательно в цивровом виде и с сылочкой:rolleyes: .
сбасиб.

chingachgoog 02.12.2007 23:31

Цитата:

Сообщение от iNils
Лишь для обратной совместимости.

Надеюсь это не так.
Цитата:

Сообщение от iNils
И вы занимаетеь подлогом, я ни где не писал слово круто, это вы придумали, чтобы оправдать свою теорию.

Вообще именно вы в посте №20 его написали, хотя дальше я конечно развил мысль самостоятельно (и кстати не писал, что это вы так именно говорили).
Цитата:

Сообщение от iNils
Я говорил о "правильно" и "неправильно". Все, остальное отговорки. Либо вы профессионал и учите писать других правильно

Правильно - это сделать работу быстро и без ошибок, по возможности предусмотреть - не придется ли ее САМОМУ переделывать?

Цитата:

Сообщение от iNils
Потому что, потом, воспользовавшись вашим советом, кто то не сможет сделать работу, из-за того, что этот способ учитывал только текущую задачу и он потратит в 3-4 раза больше времени на выяснение причин, чем на написание правильного кода сразу.
Не верите? Каждый день приходят люди с "быстрыми" исходниками и просят помочь разобраться, почему они не работают, когда меняют уровень вложенности.

Вот именно про это я и говорю: дело не в _root, а в понимании уровней вложенности. А тем кто приходит и _parent не поможет, случись поменять его на _parent._parent (в то время как _root будет пахать).
И медвежья услуга тут как раз в том, что без разбора сразу дается императив: про _root забыть.

Цитата:

Сообщение от iNils
Или когда они пишут на куждую кнопку свой код и при нахождении ошибки, они опять ходят по всем своим 100 кнопкам, и правят там код, а потом еще раз. И все потому, что быстрее было написать код на клипе.

Не, они просто по-другому не умеют. А вот когда есть выбор из нескольких способов они выберут действительно более быстрый.

iNils 02.12.2007 23:44

Цитата:

Сообщение от chingachgoog
Надеюсь это не так.

Так, в AS3 этого нет.
Цитата:

Сообщение от chingachgoog
Вообще именно вы в посте №20 его написали, хотя дальше я конечно развил мысль самостоятельно (и кстати не писал, что это вы так именно говорили).

Это была эмоция :D С таким же успехом там могло быть Здорово, Замечательно, Великолепно.
Цитата:

Сообщение от chingachgoog
Правильно - это сделать работу быстро и без ошибок

Нет. Мы говорим о написании кода, а не о результате. Вы можете писать правильно и неправильно и будет все равно работать. Только второй путь развития тупиковый. Это только кажетс, что быстрее, как только вы набиваете себе руку, и у вас отлаженная схема работы, писать становится даже быстрее
Цитата:

Сообщение от chingachgoog
И медвежья услуга тут как раз в том, что без разбора сразу дается императив: про _root забыть.

И правильно делают.

chingachgoog 03.12.2007 00:30

Цитата:

Сообщение от iNils
Так, в AS3 этого нет.

Это ни о чем не говорит.

Цитата:

Сообщение от iNils
И правильно делают.

Я все же сторонник теории образования, где объясняют ПОЧЕМУ (запамятовал научный термин :) ), а не учат КАК, а следоательно за полную информацию.

iNils 03.12.2007 00:47

Цитата:

Сообщение от chingachgoog
Я все же сторонник теории образования, где объясняют ПОЧЕМУ (запамятовал научный термин :) ), а не учат КАК, а следоательно за полную информацию.

Купите книжку.

chingachgoog 03.12.2007 01:19

Это был не вопрос :)

etc 03.12.2007 01:49

_root может ссылаться совершенно не туда, куда планировал. Строить на нем приложение очень шатко.

wvxvw 03.12.2007 01:57

Добалю немного и от себя =)
_root практично использовать иногда, когда
- нужно узнать координаты мыши
- нужно получить значения FleshVars
- нужно запихать клип на самый верхний слой, а количество слоев не известно и вариативно.

Чего НЕ нужно делать с _root:
- хранить там переменные
- ссылаться на него для получения пути к клипу
- переопределять его свойства (_x, _y, _rotation и т.д.)

Что же до быстроты работы, вот, пример прям с конвеера %)
Пишу большой, даж по моим меркам очень большой проект... чуть ли не афтерэффект на флеше =) Со мной работает девочка-дизайнер, не в обиду женскому полу, но девочка познаниями не блещет =) Но, сам я еще и анимашки делать не буду, вот, ей и отдал... Буквально сегодня нужно было их как-то прикрутить к моему проекту. Ну, я за работу - а там чего-то не ладится... Открываю исходники, и OMG! что я там вижу! =)
что-то типа
Код:

setProperty("/ball" add random(5), "_x"){....}
Прослезился, поматюкался... но завтра по Нью-Йоркскому времени часа в 3 должна быть встреча с MySpace %) И надо им показывать =)
Вобщем, разбираться чего там да как времени нет абсолютно - исправил как сумел (мало того, что все компайлилось под 4-й плеер, так еще и с ошибками)... _root не _root, onClipEvent... тут уже хоть как-то все в кучу собрать... все равно вовнуть никто лезть не будет =)

ЗЫ. Зато что поразило, офигенная (модераторы, простите) обратная совместимость! Код под 4-ку и отредактировался, и скомпилировался, и работает в итоге и в CS3! %)


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

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