Flash Zone Forum > дцать причин не любить AS3
Помощь · Поиск · Пользователи · Календарь
Полная версия этой страницы: дцать причин не любить AS3
Flash Zone Forum > Macromedia Flash > ActionScript
Страницы: 1, 2, 3
HaWK
Цитата
Поменять глубины объектов теперь на AS3 не так просто, а когда дело касается вставить объект на определенную глубину - то вообще швах.

Здесь согласен. Новая система глубин (индексов) сильно отличается от системы в AS1/AS2. Я не давно столкнулся с такой проблемой: Положил мувик на определённый индекс, а затем положил другой мувик на этот же индекс. Я думал, что новый мувик заменит старый мувик на этом индексе, но оказалось не так, старый мувик просто смещается на другой индекс и вовсе не удаляется. В AS1/AS2 содержимое глубины заменялось на новое.
chingachgoog
Цитата(HaWK @ 25.10.2010 - 14:45) *
См. свойство contentLoaderInfo. Оно принадлежит классу Loader. Так что получаемые события можно сказать за его пределы не выходят.


Ну кто бы мог подумать, что все "так просто"?
Свойство contentLoaderInfo указывает на объект ДРУГОГО класса. Таких свойств моно пачками насоздавать и все они будут на что-то указывать. Вот ведь какое удобство )))

Цитата(HaWK @ 25.10.2010 - 14:45) *
Просто написать лишнюю строчку для "Senior Programmer-а" оказывается слишком трудной задачей


А с AS3 всю дорогу так: там "лишняя строчка", сям "лишняя строчка" - и в результате код минимум в два раза больше, чем в AS1 (((

NB!

Открываем нетленку божества всех AS3-программеров и читаем на с. 280 заголовок раздела с описываемой ситуацией: НЕДОСТАТОК проверки типов в событийной модели языка AS3. Недостаток! Правда Мук все списал не на идиотизм разделения метода и события, а на компилятор, которой его сирого об этом не предупредил (Мук ведь распинался до этого, какой заботливый компилятор Адоб создала)
HaWK
Цитата
Вот ведь какое удобство )))

Кому как. "Плохому танцору......" дальше сам знаешь  smile.gif

Цитата
А с AS3 всю дорогу так: там "лишняя строчка", сям "лишняя строчка" - и в результате код минимум в два раза больше, чем в AS1 (((

Senior Programmer, умей оптимизировать свой код, чтобы такого не случалось.
HaWK
Цитата
Правда Мук все списал не на идиотизм разделения метода и события

Думаешь AS3 не развалился  бы если бы событийная модель была такая:
объект.событие = функция { ... }
?
chingachgoog
Цитата(HaWK @ 25.10.2010 - 15:24) *
Senior Programmer, умей оптимизировать свой код, чтобы такого не случалось.


Ну понятно, мистер Ли неумеха (не чета HaWK-у самой собой), что мистер Ли такое написал:

...While it is true that ActionScript 3.0 requires a couple more lines of code...

Эх, неумеет мистер Ли свой код оптимизировать, все у него кода в два раза больше выходит на AS3...

Цитата(HaWK @ 25.10.2010 - 15:24) *
Думаешь AS3 не развалился  бы если бы событийная модель была такая:
объект.событие = функция { ... }
?


ECMAScript (JavaScript, AS1) именно так событийную модель и описывает. AS3 типа по образу и подобию ECMAScript создан.
HaWK
Цитата
AS3 типа по образу и подобию ECMAScript создан.

Ну "типа" в AS1 модель такая:
объект.событие = функция { ... }
А в AS3 такая:
объект.addEventListener(событие, обработчик);
function обработчик(типПередаваемогоСобытия) { ... }


Очень уж они похожи. А оба базируются на ECMAScript.
chingachgoog
Цитата(HaWK @ 25.10.2010 - 16:25) *
Ну "типа" в AS1 модель такая:
объект.событие = функция { ... }
А в AS3 такая:
объект.addEventListener(событие, обработчик);
function обработчик(типПередаваемогоСобытия) { ... }


Очень уж они похожи. А оба базируются на ECMAScript.


Забавно. "Оба очень похожи". И "оба базируются на ECMAScript".
Хорошо. Похожи прям некуда и базируются. Не спорю.
Но тут же HaWK задается вопросом:

Цитата(HaWK)
AS3 не развалился бы если бы событийная модель была такая:
объект.событие = функция { ... }
?


laugh.gif laugh.gif laugh.gif

Т.е. тут же рядом этот же HaWK показывает, что непохожи вплоть до разваливания языка...
Раздвоение сознания налицо. Шизофрения наиболее опасна как раз для юного возраста в коем прибывает HaWK...
HaWK
Цитата
Очень уж они похожи

Для людей, умственно-отсталых - фраза означает "НЕ ПОХОЖИ"

Цитата
Раздвоение сознания налицо. Шизофрения наиболее опасна как раз для юного возраста в коем прибывает HaWK...

Наш Senior Programmer, который ставит на аватар лого MortalCombat говорит о моём юном возрасте, не смешно ли? laugh.gif На специализированном форуме, где главная тема это его специализация, участник (в лице chingachgoog-а) говорит о шизофрении. Ты уже сталкивался с этой болезнью, что тебя так про-пёрло? Ты наверное ещё и психиатр? Что ж советую проанализировать своё поведение, так как люди, которые хотя бы пытаются сохранить свою гордость не спорят, а уж тем более не пытаются доказать, что они умнее людей младше себя. Что ж если наш chingachgoog делает все эти действия, советую задуматься сколько лет ему самому  wink.gif
chingachgoog
Ладно, не буду мальчонку добивать - а то ведь и правда не честно - психиатрия входила в мой курс предметов. Думаю, публике тут все ясно... smile.gif

NB!

Mortal Kombat (эх, не знают ее мальчонки - MortalCombat называют) хорошая игрушка была. Но смысл аватара не в игре. Тот кто читал Фенимора Купера поймут, почему у меня этот аватар. tongue.gif (а фаны мортала еще и распознают из какого года взят аватар ))) )
Прямо ностальгия какая-то...
HaWK
А вообще у нашего chingachgoog-а глисты в жопе. Он не может не удержатся, чтобы не поспорить. На форуме флэшер.ру его даже забанили. Я так понял навсегда. Я даже видел восторженные посты, после его бана. Такая монера характерна для женщин (ну это пока только подозрения  smile.gif ) Так что публике точно всё ясно.

Цитата
Ладно, не буду мальчонку добивать

А вот и у нашего Сениор Программера шизофрения объявилась tongue.gif. То спорим, то не спорим. Определись, что ли.

PS На флешер.ру ему дали п**ды, вот он бедненький (может и бедненькая  tongue.gif ) сюда на форум и прискакал. Чтобы хотя бы здесь показаться умным, но не получилось, какой-то "мальчонка" ему дорогу перегородил. Страх и ужас, да?
chingachgoog
32) Автосоздание прототипов

Автозаполнение глубин показалось Адобу недостаточным и Адоб решила испоганить язык автосозданием прототипов. В AS1 прототипы можно было создавать самому. Просто и понятно:

Код
function myClass(){
    this.d=100
    this.onPress=function(){
        trace(this + " "+this.d)
    }
}

s1.__proto__=new myClass() // где s1 - обычный мувик на таймлайне(!!!) без какого-либо идентификатора в библиотеке


Тут указатель __proto__ указывает на динамически созданный объект prototype (из класса myClass)
Понятно, что в AS3 "забыли" про __proto__ и такой высший пилотаж не возможен. Возьмем пример проще.

Код
MovieClip.prototype=Math
_root.createEmptyMovieClip("s2", 10)
trace(s2.PI)


А на AS3? Пшик...
tiHo
Цитата
- Мне поставьте предупреждение! - кричал HaWK.
- Нет, я всеже больше хочу, поставьте мне! - перебивал его chingachgooq
- Ну пожалуйста, ради всего святого, мне! - продолжал HaWK
- Так у меня опыта больше в доставании людей! - с гордо поднятой головой говорит chingachgooq.


Это я перевожу ваши последние посты, глазами скучающего модератора (-:

Без шуток ребят, начиная с этого сообщения - еще одна попытка задеть друг друга - предупреждение. Говорим только по теме. ЗА и ПРОТИВ, никаких "шизофрений" и "глистов". Для этого есть медицинские форумы.
HaWK
Цитата
trace(s2.PI)

А смысл делать такое?

Если просто нужно засунуть ПИ в класс МувиКлип (хотя зачем??), что мешает сделать такое на AS3:
Код
var s2:MovieClip = new MovieClip();
s2.PI = Math.PI;
trace(s2.PI);


Или:
Код
s2.pr = Math as Class;
trace(s2.pr.PI);
chingachgoog
Цитата(HaWK @ 25.10.2010 - 21:48) *
А смысл делать такое?
Если просто нужно засунуть ПИ в класс МувиКлип (хотя зачем??)


Не всем дано понять смысл. Хотя бы он и был определен в топике.
Есть вещи которые МОЖНО делать на AS1 и НЕЛЬЗЯ делать на AS3. И нужно знать, что можно делать, а что нельзя.
А с подходом ("а какой в этом смысл") можно и до столба докопаться: чего его здесь поставили и почему он тут стоит?
Какой смысл писать на С++, когда есть С? Или наоборот?

Композицией (открытие HaWK-а, что можно дать ссылку на внешний класс) можно заменить наследование. Какой смысл в наследовании? Все. Парадигму трех китов ООП можно закрывать.

P.S.

Не стоит тут отвечать тем, кто не понял даже о чем тут идет речь.
HaWK
Я понял о чём речь. Но если посмотреть с точки зрения практики зачем всё это вытворять с прототипам когда AS1 уже устарел? Менять супер класс МувиКлипа на Math и определять методы и свойства этого класса у всех образцов МувиКлипа, чтобы потом можно было их вызывать - Да, это классно. Я могу сделать новый метод у класса МувиКлип так:
Код
MovieClip.prototype.method = function() {
   ...
}

И теперь могу вызывать этот метод у всех МувиКлипов и радоваться.
Могу даже переопределять готовые методы. Но зачем это? Всё больше API работают с AS3, а не с AS1.
И даже если топикстартер сможет со своими прототипами построить гипер-ООП приложение куда он его сунет не понятно... Только если для себя.

Цитата
Не стоит тут отвечать тем, кто не понял даже о чем тут идет речь.

Уж точно не ты решаешь кому и где отвечать на этом форуме.
MustLive
Ребята. Я временно закрою тему, чтобы снять накал страстей. Данная тема, как показал опыт её нахождения на форуме, весьма неоднозначна и вызывает массу споров, доходящий до холиваров на тему хорош AS3 или нет (а иногда и до межличностных разборок, чего на форуме публично делать не стоит и лучше для этого используйте ПМ).

Со временем я её снова открою, дабы все участники смогли продолжить обсуждать AS3 (и в частности его недостатки). Вы же тем временем сможете пустить свою энергию на другие темы форума и на другие свои дела. И как я уже говорил, сторонники AS3 могут сделать отдельную тему, в которой рассказать о своём взгляде на AS3 и о причинах его любить.
chingachgoog
33) allowDomain у LocalConnection

Помимо того, что создатели AS3 подложили свинью пользователям AS3 в виде другого синтаксиса по сравнению с этим методом у AS1, но так еще и функционал метода вышел крайне урезанным.

В AS1/AS2 можно было давать доступ по НЕПОЛНОМУ имени и вообще как угодно его проверять:

Код
lc.allowDomain = function(sendingDomain) {
// Проверяем имя sendingDomain каким угодно нам способом
return true/false // В зависимости от результата проверки
}


В AS3 этой возможности нет!

Код
allowDomain(... domains):void


Только те домены будут допущены, которые мы ЯВНО указали (или вообще ВСЕ).
chingachgoog
34) Неоправдавшиеся надежды по поводу расшаренных объектов

Одно из старейших и замечательных свойств флеша - были расшаренные объекты (файлы). Но работать с ними весьма неудобно т.к. программных методов для этого нет вообще! Были надежды на AVM2... увы. Не оправдались.
chingachgoog
35) Преобразование типа null к числам

До версии 7 ФП преобразовывал тип null к 0. Но это не соответствовало ECMA-262 и с версии 7 (Flash MX 2004) это дело привели к порядку - null стал выдавать NaN.
Однако создателям AS3 ECMA-262 видимо не указ ни разу и null опять преобразуется в 0.

uspechov
Цитата(HaWK @ 25.10.2010 - 17:40) *
А вообще у нашего chingachgoog-а глисты в жопе. Он не может не удержатся, чтобы не поспорить. На форуме флэшер.ру его даже забанили. Я так понял навсегда. Я даже видел восторженные посты, после его бана. Такая монера характерна для женщин (ну это пока только подозрения  smile.gif ) Так что публике точно всё ясно.
А вот и у нашего Сениор Программера шизофрения объявилась tongue.gif. То спорим, то не спорим. Определись, что ли.

PS На флешер.ру ему дали п**ды, вот он бедненький (может и бедненькая  tongue.gif ) сюда на форум и прискакал. Чтобы хотя бы здесь показаться умным, но не получилось, какой-то "мальчонка" ему дорогу перегородил. Страх и ужас, да?


И это пишет МОДЕРАТОР? Уши вянут.
А аргументы у chingachgoog-а в пользу AVM1,  и недостатков AS3 убедительны и правомерны, по крайней мере для тех, кто во флэше начиная с 5.
И главное очень плохо, что адобы развитие AVM1 закрыли.
HaWK
uspechov, уже плотно работал с AS3? Если работал - так что же не устроило то тебя? Не расскажешь? smile.gif

chingachgoog
36) Зачем buttonMode для мувиклипов?

В AVM1 было превосходнейшее средство для создания из мувиклипов настоящих кнопок: в мувиклип добавлялись специальные лейблы "_up", "_over", "_down" и как только на мувиклип назначался обработчик мыши, мувиклип автоматически переходил на кадры с этими метками по событиям onRollOut, onRollOver, onPress соответственно (эти события НЕ НАДО было назначать специально!).

Теперь для такого же функционала мувиклипу необходимо назначить свойству buttonMode значение true. Спрашивается: зачем? В AVM1 автоматический режим включался при добавлении любого из обработчиков кнопок. Если обработчик НЕ задан, то НЕ БУДЕТ и переходов по кнопке-клипу. В AVM2 опять маразм: даже если ни один обработчик НЕ задан, но задан buttonMode, то все равно есть переход по меткам.

Кстати, этот buttonMode теперь отвечает и за вид курсора в виде руки, а не стрелки. Зачем столько лишних телодвижений? Чтобы мистер Ли сказал, что это правда, что AS3 требует вдвое больше кода?
HaWK
Цитата
Может я что-то не понимаю, но этой возможности в AVM2 я что-то не обнаружил.

не то? smile.gif
HaWK
Цитата
36) Зачем buttonMode для мувиклипов?

Ты уже не знаешь за что придираться.

Цитата
Спрашивается: зачем?

Новая AVM - новые правила.

Цитата
В AVM1 автоматический режим включался при добавлении любого из обработчиков кнопок.

Ну и зачем нужна вся эта автоматика? Разработчик сам решает что у него button, а что у него "неbutton".
chingachgoog
37) Run-time ошибки

На самом деле для разработчика наличие проверок ошибок в рантайме (т.е. при исполнении кода флеш-плеером) - неоценимое преимущество. Казалось бы - это круто, что в AVM2 можно поймать кучу ошибок, да еще с их кодами! И не в дебаг-плеере, а в самом обычном.
Казалось бы... Но. ЛЮБАЯ из ошибок приводит к выбросу исключения и - внимание - ПРЕРЫВАНИЮ КОДА, если не было обработчика исключения try-catch. Такого в AVM1 практически нет: во-первых, нет такой кучи разжеванных ошибок, а во-вторых - то, что для немца смерть (ошибка для AVM2), для русского хорошо (не является ошибкой для AVM1).
Выход - писать код без ошибок (ха-ха три раза) или на каждый вздох обрамлять код try-catch (а код в AS3 и без того громоздок). Иначе - код прервется (!) в самом неожиданном месте и разработчик об этом и знать не будет...
chingachgoog
38) Ограничения с работой JavaScript

AVM1 имел уникальный JavaScript API для работы с  swf-файлом. Можно было как писать в swf, так и считывать из него инфу.
В AVM2 его убили, оставив только ExternalInterface.

Компилим swf под AS2
код на руте
Код
var ttt="asdfg"


В html-страничке пишем JS код:

Код
window.onload = function() {  
            //node - это наш ФП c swf
            setTimeout(function(){
                alert("= "+node.GetVariable('/:ttt'))
                }, 2000)

        }


Как и надо видим результат!

Но если закомпилить под AS3, то видим фигу (((

PS

ExternalInterface на самом деле работает достаточно убого.
Во-первых - это та же СИНХРОННАЯ работа.
Во-вторых, данных передается на порядок больше - они сериализируются в xml-описание-строку!
chingachgoog
39) isDown почила в бозе...

Мало того, что Адоб лоханулся с глобальными обработчиками и теперь надо вешать их на стейдж на две фазы!
Так еще они прикрыли isDown! Якобы по соображениям их дырявой безопасности  mad.gif
Надо ли объяснять какие возможности открывало это свойство? Я уж не говорю про правую кнопку мыши, но можно было назначить комбинацию клавиш, которую легко проверить в любой момент времени!
DJKOT
 ничего себе юморок... трудно представить, на что это будет похоже через пару версий...
chingachgoog
Ну там еще isToggled () прибили, но я уж не стал об этом писать, т.к. в общем-то можно было поймать через isDown.
chingachgoog
40) Нет аналога onLoadComplete

В LoaderInfo событие complete попадает ПОСЛЕ того, как отработает событие init и после того как ролик целиком загрузится.
В AVM1 было все по-другому. Событие onLoadComplete у MovieClipLoader отрабатывалось после загрузки ролика, но до того как отработает его первый кадр, т.е. до события onLoadInit.
Событие AVM2 complete более похоже на событие onLoad у MovieClip.

Таким образом у AVM2 НЕТ ВАЖНОГО СОБЫТИЯ - когда клип загружен и доступны его графические элементы (можно определить их свойства), доступен таймлайн (можно переходить по кадрам), можно назначать новые свойства - и все это ДО ТОГО МОМЕНТА когда отработает код первого кадра (произойдет инициализация).

Как обычно - очередное "удобство"...
geenny
У класса LocalConnection под avm2 есть еще один не очень известный косяк. При загрузке swf написанных на as2 и as3 из разных доменов as2 может вызывать методы as3, а as3 в as2 - нет, хоть что там в allowDomain ни пиши - звезду, домен, айпишник. То есть прикрыли возможность!
chingachgoog
Цитата(geenny @ 7.09.2011 - 15:12) *
У класса LocalConnection под avm2 есть еще один не очень известный косяк. При загрузке swf написанных на as2 и as3 из разных доменов as2 может вызывать методы as3, а as3 в as2 - нет, хоть что там в allowDomain ни пиши - звезду, домен, айпишник. То есть прикрыли возможность!


Нет - там все можно, просто есть хитрость.
см. п. 33
chingachgoog
41) Как обычное видео AVM2 убивает

Обычное флеш-видео (.flv) дергает обработчики onMetaData и onCuePoint во флешке. Естественно в новой событийной модели AVM2 возникают эксепшны, которые и рушат всю работу флешки. Конечно, решение есть. И даже несколько вариантов. Но факт характерен - очередная "забота" о разработчиках налицо.
chingachgoog
42) smoothing vs forceSmoothing

Докладываю. В AVM1 у класса MovieClip было много удобных свойств, например - forceSmoothing.
А в AVM2 у MovieClip такого свойства нет даже в наследуемых свойствах! Ближайший аналог - свойство smoothing у класса Bitmap
И тут, как обычно, вылезают грабли новых "удобств": для сглаживания растра надо лезть теперь в каждый битмап и выставлять smoothing. Но даже не это "замечательно" - если у меня нет доступа к подгружаемому, муву, например, который где-то как-то грузит/рисует битмап, то я не смогу выставить сглаживание у этого мува, а сглаживание по умолчанию отключено!
Занавес...
chingachgoog
43) enabled работает нефункционально!

В дополнению к п.36.
В AVM1 enabled работал интуитивно понятно и функционально: выставили его в false - кнопка становилась нерабочей (не реагирует на движения мыши, не включаются обработчики).
В AVM2 это какая-то насмешка над разумом:
1) во-первых это действительно только для режима выставляемого с помощью buttonMode
2) во-вторых, весь смысл теряется: enabled стал отвечать ТОЛЬКО за передвижением по кадрам кнопки, но даже если он false, то обработчики продолжают работать!!!

Вообщем выходит так, что enabled лишь дублирует функционал buttonMode. Ничего нового или уникального enabled не делает. Непонятно тогда, зачем вообще воткнули это свойство? Чтобы могли сказать: как много новых свойств у AVM2 по сравнению с AVM1?

PS

Забавно, что buttonMode имеет основной смысл ТОЛЬКО для мувиков. Для спрайтов - это только придание курсору вида руки - ведь в спрайтах нет кадров и нельзя перейти на кадры состояния кнопки!
chingachgoog
44) Недокументированные фичи

Да, в AVM1 была масса недокументированных вещей (спасибо адобам) типа ASnative.
Но в AVM2 стало не лучше. Вот, например, известный метод MovieClip, который ни разу не документирован:

addFrameScript(frame_number:uint,function_to_call:Function)

Метод позволяет добавлять функцию (ее вызов вернее) в кадр - при прохождении этого кадра, функция будет вызвана.
Как говорится, кто знает - есть ли что еще...
MustLive
addFrameScript - интересная функция. Чтобы не руками в кадр на таймлайне добавлять код, а программно задавать вызов функции в нужном кадре. Как видно по этому примеру, Адобовцы продолжили традицию ASnative в новой AVM.

Цитата
Как говорится, кто знает - есть ли что еще...

Есть - это премиальные фишки, что мы в январе обсуждали. Этот недокументированный функционал доступен не на уровне AS, а на уровне опкодов.
chingachgoog
45) XML vs E4X

Вообще, хотя лично мне E4X не удобен и упоминания о нем у меня чаще матерные, но сам по себе факт еще одного способа работы с xml-документами никакого раздражения не вызывает - наоборот, чем больше возможностей, тем лучше. Ну мне не нравится, а кому-то даже очень (встречал только двух таких восторженных smile.gif )
Но как обычно, адобы не просто дали еще одну возможность, а придушили старую.
Речь даже не о том, что теперь XML стал XMLDocument, хотя по уму надо бы наоборот. Ладно - это пустяк.
Все гораздо хуже.
В AVM1 класс XML разумеется динамический (как и все классы в AVM1). И даже если тупой адобовский компилятор не позволял использовать точечный доступ к объекту, то завсегда можно было использовать доступ [ имя свойства ]. Что позволяло хранить в XML-объекте полезные свойства.
В AVM2 засады две:
1) XMLDocument (XML -old style) стал НЕдинамическим! Как и XMLNode! Вот это просто уму не постижимо! Зачем?
2) XML (E4X style) хотя и динамический, но с какого-то перепугу final! Не так страшно, но все равно странно.

Т.е. адобы вместо того, чтобы проторить широкую дорогу работы с xml двумя способами, на самом деле дорогу сузили и перегородили препонами.


chingachgoog
escape/unescape

Ребята, это мрак (((

Код
var s0='Копия'
var s1='%d0%9a%d0%be%d0%bf%d0%b8%d1%8f'
trace(unescape(s1)+"\r\r\r"+escape(s0))


Компилим под AVM1, а потом под AVM2
Не, я конечно, не спал сегодня с полпятого утра, но как теперь строку обратно в юникод перевести? Это что же - продолжение грабель с вводом кириллицы на прозрачном фоне? Не, ну ваще - одни эмоции!!! blink.gif
MustLive
Цитата
escape/unescape

Да уж smile.gif. Похоже в AS3, по задумке разработчиков, не нужно кириллицу эскейпить/анэксейпить (и юникод в целом).

Но может в AS3 эта процедура проводится как-то хитро. Попробуй детально исследовать этот вопрос.
chingachgoog
Пока придумал своё решение вопроса для unescape. Дарю всем 4 тыс. руб. ))) Пользуйтесь:

Код
function unescape(text:String):String {
            
            var txt:String = getDefinitionByName("unescape")(text)
            var b:ByteArray=new ByteArray()
            for (var i:int=0; i<txt.length; i++){
                b.writeByte(txt.charCodeAt(i))
            }
            b.position=0
            return (b.readUTFBytes(b.length))
}


PS

Вот еще в кучу забавности в AVM2 дебаггера с trace:

Код
var tf:TextField=new TextField
tf.autoSize=TextFieldAutoSize.LEFT
tf.multiline=true
addChild(tf)

trace(unescape('МультÑ')) // МультÑ
trace('Мульты') // Мульты
tf.text=unescape('МультÑ')+" "+'МультÑ' // ÐœÑƒÐ»ÑŒÑ‚Ñ ÐœÑƒÐ»ÑŒÑ‚Ñ
chingachgoog
Интересные особенности простых кнопок
(в дополнение к теме о глюках)

В кнопки ведь можно вкладывать мувиклипы, текстовые поля и т.п. В данном случае я вкладываю динамическое текстовое поле и даю ему имя dt.
Задача - поменять в кнопке текст в этом текстовом поле. Текстовое поле одним символом на все 4 кадра (один ключевой кадр)
Формально задача не решается ни в AVM1 ни в AVM2

AVM1 класс Button
Текстовое поле лишается своего имени и заменяется на что-нибудь типа instance0 поэтому, чтобы его найти надо:

Код
for (i in button) {
    if (button[i] instanceof TextField) {
        button[i].text="Новый текст"
    }
}


Текст заменяется во всех 3-х кадрах!

AVM2 класс SimpleButton
Тут вообще нет доступа к элементам, т.к. формально нет наследования от DisplayObjectContainer, но найти можно:

Код
var arr:Array=getObjectsUnderPoint(p)
    var obj:*
    for (var i:int=0; i<arr.length; i++){
        obj=arr[i]
        if (obj as TextField) {
            TextField(obj).text="Новый текст"
        }
    }


Но текст заменяется ТОЛЬКО В ОДНОМ кадре. Где была на этот момент кнопка.
rbskip
http://kleopatra-relax.ru/ массаж, салон массажа, релакс массажи, массажный салон 
Нижний Новгород.СПА - процедуры для тела (скрабирование, обертывание);Оздоравливающие программы;Финская сауна;Бильярд
Русская версия IP.Board © 2001-2016 IPS, Inc.