PDA

Просмотр полной версии : Размышления по поводу фреймов AS 2.0


Seroy
06.11.2009, 15:16
Не знаю, кто как, а я в AS 2.0 - все равно что по болоту. Идти трудно, а вылезти из него еще труднее. :wacko:

А что вы думаете об AS 3.0?

etc
06.11.2009, 15:18
Вас непонятно.

Seroy
06.11.2009, 15:53
Вас непонятно.

я - насчет фреймов. Интересует мнение: кто-нибудь толком разобрался с ними? Ну просто жуть. Пример: делаю глобальную переменную _global.n в _root, пытаюсь вызвать ее как n внутри какого-то клипа - не проходит! (CS 4). И так постоянно. Я так понимаю, что клипы и фреймы это вроде как классы, со своими заморочками - ну так и надо обыгрывать, излагать все в учебниках согласно классовой теории, иначе потом попробуй перейди на другой язык (AS 3).

amesqit
06.11.2009, 17:12
излагать все в учебниках согласно классовой теории.
Вас интересует AS 2 с точки зрения классовой теории происхождения государства К.Маркса? :)
Если серьезно, то не понятна формулировка вопроса, больше похоже на бессвязные обрывки мыслей. В чем именно проблема с фреймами? Что не проходит? Как постоянно? Попробуйте грамотно и последовательно сформулировать вопросы.

Seroy
06.11.2009, 18:33
Вас интересует AS 2 с точки зрения классовой теории происхождения государства К.Маркса?
Если серьезно, то не понятна формулировка вопроса, больше похоже на бессвязные обрывки мыслей. В чем именно проблема с фреймами? Что не проходит? Как постоянно? Попробуйте грамотно и последовательно сформулировать вопросы.

1. Конкретный вопрос: как вызвать в CS4 из клипа (не основного - не _root) глобальную переменную? особенно если внутри него - еще вложенный клип, и надо переменную вызывать из последнего. Пример: для фреймов клипа, вложенного на 2 уровня (_root._root._root.mc), есть переменная, которая является их маркером (нумерует кадры). А на главной врем. шкале это должна быть глобальная переменная.
2. Общая проблема: КАК привязать структуру AS 2 к AS 3? чтобы проще перейти с одного языка на другой.

amesqit
06.11.2009, 20:02
1) По-моему вы не понимаете что из себя представляет _root и фреймы. _root - главная сцена исполняемого ролика, в AS 2 это всегда ведет на сцену стоящую вверху иерархии отображаемых объектов, деже если существует где-то клип в который будет загружен swf файл, то внутри этого swf файла ссылка _root будет вести на главную сцену загружающего клипа. Фрейм - кадр временой шкалы (таймлайна).
Из выше сказанного следует что trace(_root._root._root.mc == _root.mc) //true
2) AS2 и AS3 в общем-то разные языки, со своими плюсами и минусами, знание одного не говорит ничего о знании другого. В AS 3 и понятие root имеет несколько иное значение и _global там нет. По-моему самый простой способ перехода от as2 к as3 это после as2 заняться изучением as3, вам переходить по-моему пока не от чего, только изучать, при том можно сразу as3, все что нужно так это понимать технологию ООП.

Seroy
06.11.2009, 22:06
1) По-моему вы не понимаете что из себя представляет _root и фреймы. _root - главная сцена исполняемого ролика, в AS 2 это всегда ведет на сцену стоящую вверху иерархии отображаемых объектов, деже если существует где-то клип в который будет загружен swf файл, то внутри этого swf файла ссылка _root будет вести на главную сцену загружающего клипа. Фрейм - кадр временой шкалы (таймлайна).
Из выше сказанного следует что trace(_root._root._root.mc == _root.mc) //true
2) AS2 и AS3 в общем-то разные языки, со своими плюсами и минусами, знание одного не говорит ничего о знании другого. В AS 3 и понятие root имеет несколько иное значение и _global там нет. По-моему самый простой способ перехода от as2 к as3 это после as2 заняться изучением as3, вам переходить по-моему пока не от чего, только изучать, при том можно сразу as3, все что нужно так это понимать технологию ООП.

По-моему, это вы не совсем понимаете, что такое _root в AS 2. Или сознательно вводите в заблуждение меня и других посетителей сайта, представляя меня неучем, а себя - светилом Flash.

Если по-вашему _root._root._root.bc=_root.bc, вне зависимости от глубины залегания переменной, потрудитесь объяснить, отчего при определении _root.bc внутри клипа в функции _root.onEnterFrame я НЕ МОГУ вызвать эту переменную (_root.bc) из кода главной шкалы?

выходит, что функция _root.onEnterFrame, определенная во вложенном клипе, поглавнее той, что определена на гл. шкале.

Вот вам и ООП!

P.S. Что касается глобальных переменных, насколько я понял, вложенная в клип глобальная переменная _global.a переопределяет значение глобальной переменной _global.a главной шкалы. Похожая история.

spooner
06.11.2009, 22:36
Согласен с amesqit, по-моему вы чуть чуть не так понимаете концепцию.

etc
06.11.2009, 22:53
Да, кстати, именно AS2 в кадрах и не пишут, как и AS3.

Seroy
07.11.2009, 00:35
Да, кстати, именно AS2 в кадрах и не пишут, как и AS3.

Возможно, более верным в моем случае было бы не писать в кадрах код и вынести его во внешние файлы (вы это имели в виду?).

Но, во-первых, тогда не так уж непреодолима разница между AS 2 и AS 3, как двое наших собеседников пытаются это представить (выходит, что оба языка типично ООПовские, и AS 3 - улучшенная, расширенная версия AS 2);

во-вторых, насчет того, "пишут" или "не пишут" "AS 2 в кадрах", прежде чем "швырнуть в свет", неплохо было бы справиться у Колина Мука (хотя бы на стр. 294 его Essential ActionScript 2.0):

http://www.adobe.com/devnet/flash/articles/comp_moock/as2ess_ch12.pdf (http://www.adobe.com/devnet/flash/articles/comp_moock/as2ess_ch12.pdf).

amesqit
07.11.2009, 00:52
Seroy, не хочу вас огорчать, но перепишите код на главной временной шкале на

_root.onEnterFrame=function(){
trace("_root.bc = "+_root.bc);
trace("_root.ac.ac.bc = "+_root.ac.ac.bc);
}
//Результат
//_root.bc = 5
//_root.ac.ac.bc = undefined

из этого следует что у вас нет _root.ac.ac.bc , но есть _root.bc, вы сами вводите себя в заблуждение проделывая трейсинг непонятно чего.
Так же соглашуь с уважаемым etc, в кадрах пишется код не as2, а as1, просто as2 при компиляции преобразуется в as1, однако он за счет вынесения кода в отдельные классы, позволяет повторно использовать код и распределяет доступ к данным на этапе компилирования приложения.
Принцип работы _global, вы тоже не понимаете, он не может быть свой для главной временной шкалы или для вложенного клипа, он единственный и не повторимый, доступный из любого места приложения, и естественно, что в любом месте приложения (на то он и глобальный объект). Если будет что-то присвоено _global.a в любом месте приложения, то при обращении в любом месте к _global.a мы получим последнее присвоенное ему значение.

Seroy
07.11.2009, 01:42
Seroy, не хочу вас огорчать, но перепишите код на главной временной шкале на

_root.onEnterFrame=function(){
trace("_root.bc = "+_root.bc);
trace("_root.ac.ac.bc = "+_root.ac.ac.bc);
}
//Результат
//_root.bc = 5
//_root.ac.ac.bc = undefined

из этого следует что у вас нет _root.ac.ac.bc , но есть _root.bc, вы сами вводите себя в заблуждение проделывая трейсинг непонятно чего.
Так же соглашуь с уважаемым etc, в кадрах пишется код не as2, а as1, просто as2 при компиляции преобразуется в as1, однако он за счет вынесения кода в отдельные классы, позволяет повторно использовать код и распределяет доступ к данным на этапе компилирования приложения.
Принцип работы _global, вы тоже не понимаете, он не может быть свой для главной временной шкалы или для вложенного клипа, он единственный и не повторимый, доступный из любого места приложения, и естественно, что в любом месте приложения (на то он и глобальный объект). Если будет что-то присвоено _global.a в любом месте приложения, то при обращении в любом месте к _global.a мы получим последнее присвоенное ему значение.

Прошу прощения - не закомментировал лишнюю строку:
//trace(_root.ac.ac.bc);

Но вы меня, видимо, в упор не видите:
я говорил вам о функции _root.onEnterFrame, о том, что она будет видна только из самого глубокого клипа (когда до него дойдет очередь) - и я отнюдь не спорю, что "чтение" кода при выполнении производится сверху вниз. Только уж очень этот низ неопределенный: мало того, что чтение идет слева направо (по кадрам), сверху вниз (по скриптам), так еще и куда-то вглубь (по клипам). Я ГОВОРЮ О ТОМ, ЧТО ВЫ В УПОР НЕ ВИДИТЕ И НЕ СЛЫШИТЕ: что клипы, и функции (в т.ч. _root.onEnterFrame), и переменные AS 2 вполне себе ООП, только в реализациях Flash CS работа с таким ООП поставлена уродливо и путано...

Что до нежелательности использования AS 2 в кадрах, то - соглашусь - это неудобно.

Что же до моего "непонимания", могу сказать одно: пока вокруг будут преподаватели и "наставники", подобные вам, надеяться придется разве что на себя.

etc
07.11.2009, 01:43
AS2 и AS3-код пишется в классах. Никакого кода в кадрах, вообще. Но AS3 с AS2 помимо этого больше ничего общего не имеет.

То, что вы пишете — обыкновенный AS1.

Seroy
07.11.2009, 02:09
AS2 и AS3-код пишется в классах. Никакого кода в кадрах, вообще. Но AS3 с AS2 помимо этого больше ничего общего не имеет.

То, что вы пишете — обыкновенный AS1.

Положим, так оно и есть. Но зачем тогда в среде Flash - в окне Action - Frame! - опция выбора AS 1 - AS 3.

Да, кстати, судя по сайту, AS 1 и AS 2 чуть не сиамские близнецы: мало того, что в одном разделе живут, так еще и под одним именем! (см. на кнопку AS рядом с кнопкой AS3 в меню сообщений).

etc
07.11.2009, 02:22
AS2 всего лишь надстройка над AS1, но имеет ту же идеологию, что и у AS3. Только у последнего писанина в кадрах в любом случае трансформируется в класс.

amesqit
07.11.2009, 11:13
Вообще-то сомневаюсь что вы тут найдете много преподавателей, в основном тут обычные программисты, общающиеся с другими программистами. Если возникает проблема, кто-то хочет и может помочь, то помогают, обычно при этом те кому помогают не спорят, что они все и так знают :)
я говорил вам о функции _root.onEnterFrame, о том, что она будет видна только из самого глубокого клипа (когда до него дойдет очередь) - и я отнюдь не спорю, что "чтение" кода при выполнении производится сверху вниз. Только уж очень этот низ неопределенный: мало того, что чтение идет слева направо (по кадрам), сверху вниз (по скриптам), так еще и куда-то вглубь (по клипам). Я ГОВОРЮ О ТОМ, ЧТО ВЫ В УПОР НЕ ВИДИТЕ И НЕ СЛЫШИТЕ: что клипы, и функции (в т.ч. _root.onEnterFrame), и переменные AS 2 вполне себе ООП, только в реализациях Flash CS работа с таким ООП поставлена уродливо и путано...
Использование конструкции _root.onEnterFrame крайне нежелательно, из-за ее неудобства в том, что есели где-то в глубине какой-то горе программист объявит свою функцию _root.onEnterFrame, то она переопределит более ранюю. В большенстве случаев _root использовать вообще не стоит, лучше использовать относительную адресацию и писать this.onEnterFrame.

Seroy
07.11.2009, 18:15
Вообще-то сомневаюсь что вы тут найдете много преподавателей, в основном тут обычные программисты, общающиеся с другими программистами. Если возникает проблема, кто-то хочет и может помочь, то помогают, обычно при этом те кому помогают не спорят, что они все и так знают :)

Использование конструкции _root.onEnterFrame крайне нежелательно, из-за ее неудобства в том, что есели где-то в глубине какой-то горе программист объявит свою функцию _root.onEnterFrame, то она переопределит более ранюю. В большенстве случаев _root использовать вообще не стоит, лучше использовать относительную адресацию и писать this.onEnterFrame.

Во-первых, не вижу, чем именно вы мне помогли, кроме ссылок на старших авторитетов. Путанно и непонятно, с важным видом, ссылаясь на авторитетных товарищей, начали мне "втирать очки", переозвучивая мои размышления на свой лад и при этом всякий раз "пиная" наглого "лузера".

Хорошо, что хоть "под занавес" вы сподобились упомянуть о злополучной функции.

Во-вторых, если бы здесь никто "не спорил" с такого рода "помощниками", форум бы просто вымер... Косноязычие и невнимательность к проблеме превратили бы его в океан "флуда".