Flash Zone Forum > дцать причин не любить AS3
Помощь · Поиск · Пользователи · Календарь
Полная версия этой страницы: дцать причин не любить AS3
Flash Zone Forum > Macromedia Flash > ActionScript
Страницы: 1, 2, 3
chingachgoog
В свое время в сети попалась презентация "50 причин перейти на AS3", так, что тут будет (со временем) нечто вроде контрответа, а также разбор отличий AVM1 (AS1/AS2) от AVM2 (AS3).

(не следует считать этот топик отрицанием AVM2 и AS3. Хороший флешер должен уметь понимать любой код: от кода в стиле флеш-5 (на объектах), до кода AS3. Но чтобы хорошо в чем-то разбираться, надо знать не только сильные стороны, но и слабые, а также тщательно скрываемые)

Итак, поехали:

1) Адоб сознательно (умышленно) пошла на СДЕРЖИВАНИЕ развития AVM1. От версии к версии (флеш-плеера) AVM1 развивалась. Но адоб выпустила новые продукты - основанные на AVM2 (флеш-редактор-9 - он же CS3 и уже CS4, флексы всех мастей и аир). Развитие AVM1 тормозиться, заставляя переходить сообщество на продукты с использованием AVM2.
Например, интерпретатор AVM1 может считывать байт-коды названия меток кадра. Т.е. в самом ФП эта возможность реализована. А вот реализацию этого в AS1/2 адобовцы добавить "забыли", хотя для AVM2 с AS3 это сделано. И так во многом.

2) AS3 не сохранил преемственности с прежними версиями AS. Это ДРУГОЙ язык. С другими традициями и особенностями применения. По сути, те, кто захочет и кого заставит адоб перейти на AVM2 будут должны выучить новый язык.

3) AS3 имеет незаметные, но фатальные отличия от AS2. Например, в типизации :Void и :void
Пустячок? Но отчего у макромедии с каждым обновлением ФП не скакали зарезервированные слова?

4) AS3 гораздо более НЕГИБКИЙ (какое издевательство над слово флекс), чем AS1. Это касается очень широкого спектра средств языка: наследования, областей видимости, обращения к объектам, формата записи во внешние файлы и т.д. и т.п. (см. ниже)

5) AS3 не позволяет менять родителей класса. AS1 делает это легко, динамически и в любое время.
Например, после этого:
Код
Video.prototype.__proto__=MovieClip.prototype

У объекта Видео начинают работать методы мувиклипа типа swapDepths() и removeMovieClip() !!!

6) Код на таймлайне
7) Новый синтаксис пакетов и классов 
8) Нет duplicateMovieClip
9) Необходимость деструкторов
10) Мучения с Sound
11) Выделение искусственных классов
12) Громоздкий хелп
13) Кастрация событийной модели
14) Смешной onReleaseOutside
15) Зачем в AS3 убили arguments.caller
16) Как сыпятся песочницы адоба
17) Восьмеричный запрет
б/н Откровения мистера Ли из адоба
18) Жесткий override
19) Ограничения override
20) Убогий super
21) А есть ли полиморфизм?
22) Немного об ECMAScript
23) Ограничения таймлайна
24) Глобальный объект и глобальная видимость
25) Они убили watch()...
26) Нет глобальных событий
27) Компилятор AVM2 не оптимизирует код
28) valueOf ()
б/н Про вес ФП
29) Виртуализация таймлайна и баги с этим связанные
30) Идиотизм Loader-а
31) "Легкие" глубины.
32) Автосоздание прототипов
33) allowDomain у LocalConnection
34) Неоправдавшиеся надежды по поводу расшаренных объектов
35) Преобразование типа null к числам
36) Зачем buttonMode для мувиклипов?
37) Run-time ошибки
38) Ограничения с работой JavaScript
39) isDown почила в бозе...
/2D/
 сам с неохотой переходил на as3, но со временем понимаешь что некоторые вещи в нём удобнее делать, да и надежда что adobe в дальнейшем создадут какой-нибудь as4 похожий на as2  очень мала, а As2 все стареет и стареет, ничего нового в нем  не появится, поэтому и логично перети на as3 какие-бы недостатки в нём не были, все равно эти недостатки могут быть исправлены более новой версией flash и as.
chingachgoog
Цитата(/2D/ @ 1.03.2009 - 10:03) *
со временем понимаешь что некоторые вещи в нём удобнее делать


Например, что было неудобно делать в AS1/2 и стало удобно делать в AS3?

Цитата(/2D/ @ 1.03.2009 - 10:03) *
логично перети на as3 какие-бы недостатки в нём не были


Если задача потребует именно новых возможностей AVM2, то да - логично.

----------------------------------------

6) В AS3 код можно писать на кадрах. Но это иллюзия. Код после этого будет преобразован в автоматический класс таймлайна, на котором он написан. Соответственно накладываются ограничения (см. п.23).
Этот класс будет ДИНАМИЧЕСКИМ. А в AS3 динамические классы выполняются МЕДЛЕННЕЕ, чем обычные.

7) В AS3 внешние файлы обязаны располагаться в строгом порядке и иметь строгие имена. А в AS1 инклюдом можно располагать внешние файлы где угодно и как угодно их именовать.
add:
В AS3 тоже есть свой инклюд, только синтаксис без # (это скорее к п.3)
Также новый синтаксис пакетов и классов во внешних файлах, по сравнению с AS2.
/2D/
Цитата
Например, что было неудобно делать в AS1/2 и стало удобно делать в AS3?

smile.gif первое что пришло на ум , это рисование круга, вспомним сколько гемороя с curveTo в As1/2, и drawCircle/Ellipse на as3, намного проще работать со слоями объектов, добавленных на сцену, возможность переноса объекта из одного слоя в другой без удаления и последующего атача клипа итд... , и ещё вот этот знак нижнего поддеркивания "_" перед свойствами объектов(_x _y _width _height _xscale ...) , добавление прослушивателя событий (addEventListener) - тоже удобная вещь, но на as2 по-моему что-то подобное было, наконецто можно регулировать громкость одельных звуков, а не всего ролика сразу, и, о да, в trace можно вписывать несколько переменных через запятую, и и не сувать их в [], да ещё много чего можно придумать..
Я конечно утрирую, говоря про неудобства as1/2, и в as3 можно найти не меньше "неудобств" и не только... wink.gif
Цитата
Если задача потребует именно новых возможностей AVM2, то да - логично.

Конечно решающей ролью по крайней мере моего перехода на as3 стало появления "новых возможностей AVM2", и наплевать что там изменилось и как оно работает, главное работает, и больше возможностей smile.gif

Вобщем я уже ушел от темы, продолжаем дальше перечислять минуы as3:
8) был удален метод duplicateMovieClip, теперь все параметры дублируемого объекта дублируем вручную smile.gif
chingachgoog
Цитата(/2D/ @ 2.03.2009 - 17:09) *
smile.gif первое что пришло на ум , это рисование круга, вспомним сколько гемороя с curveTo в As1/2, и drawCircle/Ellipse на as3


Это как сказать проще.
На AVM1 это решалось добавлением своего метода drawCircle в прототип мувиклипа. Функционал любой. Но работало сразу с мувиклипом.
А в AVM2 сколько всего надо наворочить, чтобы отрисовать круг (до вызова drawCircle)?

Цитата(/2D/ @ 2.03.2009 - 17:09) *
намного проще работать со слоями объектов, добавленных на сцену


Разве проще?
http://www.kirupa.com/forum/showthread.php...023#post1897023


Цитата(/2D/ @ 2.03.2009 - 17:09) *
возможность переноса объекта из одного слоя в другой без удаления и последующего атача клипа итд...


Вот кстати еще одна причина-расплата за такое полезное (без шуток) новшество:

9) Если вы удали мувик с экрана (из списка Display Objects) это не означает, что мувик вы удалили. Удалить мувик теперь весьма проблемотично: надо удалить ВСЕ ссылки на мувик и дождаться пока GC не потрет его (а GC ведет себя довольно самовольно)


Цитата(/2D/ @ 2.03.2009 - 17:09) *
и ещё вот этот знак нижнего поддеркивания "_" перед свойствами объектов(_x _y _width _height _xscale ...)


Вроде очень удобно - сразу видно, что это геттер-сеттер свойство, а не обычное свойство.

Цитата(/2D/ @ 2.03.2009 - 17:09) *
добавление прослушивателя событий (addEventListener) - тоже удобная вещь, но на as2 по-моему что-то подобное было


Было. Причем очень гибкая вещь в том числе: AsBroadcaster.

Цитата(/2D/ @ 2.03.2009 - 17:09) *
наконецто можно регулировать громкость одельных звуков, а не всего ролика сразу


Почему это в AVM1 нельзя было регулировать отдельные звуки? Еще как можно и нужно smile.gif
А вот в AS3 со звуком есть беда. Как вспомню - напишу отдельным пунктом smile.gif
chingachgoog
Цитата(chingachgoog @ 2.03.2009 - 17:34) *
А вот в AS3 со звуком есть беда. Как вспомню - напишу отдельным пунктом smile.gif


10) Ага вспомнил.

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

Чтобы начать играть звук - используем класс Sound
Чтобы поменять громкость - используем класс SoundTransform
А чтобы остановить звук - класс SoundChannel

Чтобы поменять громкость отдельного звука, надо сохранить кучу ссылок, чтобы потом воспользоваться SoundTransform, а если начать играть звук второй раз, то проделать это ЗАНОВО, т.к. канал изменится.

add:

Некоторые файлы, которые нормально без глюков проигрывались в AVM1, начинают жутко глючить в AVM2.
chingachgoog
11) Маразм с разбиением классов на мелкие подклассы настолько крепок, что лезет во все дыры, а не только в класс Sound.
Взять хотя бы класс BevelFilter. Там есть параметр type:String. Это обычная строка! Но в AS3 добавили новый класс, который хранит константы этих строк: класс BitmapFilterType. Это все якобы для "заботы" о программисте. Забота заключается в том, что теперь надо добавлять строчку import flash.filters.BitmapFilterType; в код и потом писать BitmapFilterType.INNER вместо "inner". Зато адоб теперь может сказать, что в AS3 стало еще на один класс больше по сравнению с AS1/2 - это же прогресс!
Конечно, в AS1/2 тоже были константные значения написанные заглавными буквами (по-моему выглядит ужасно, но это дело привычки) как и в AS3. Например, Key.BACKSPACE , вместо простой записи цифры 8, но никто почему-то эти статичные свойства не выделял в ОТДЕЛЬНЫЙ класс.

12) Как результат пункта 11 хелп по AS3 выглядит невероятно неуклюже и громоздко. Но адоб умудрилась и тут его еще больше испортить: теперь весь класс со всеми методами и классами идет одной большой "простыней", а не отдельными страничками по каждому методу и свойству, как в AS1/2.

13) AS1/2 позволял гибко и многообразно использовать события. AS3 предусматривает только лишь модель диспетчеризации событий. В результате код становиться опять-таки громоздким (и из-за этого менее понятным). А с учетом пункта 11 выходит громоздкость в квадрате!
То, что раньше можно было записать кнопка.onPress=Имя_функции (и все понятно), теперь разводиться в несколько строк:
Объект.addEventListener(тип_события, Имя_функции)
Имя_функции(событийный_параметр)

(надо теперь не забыть про соответствие типа_события событийному_параметру)

Но проблемы только начинаются: с удалением кнопка удалялся и метод кнопка.onPress - и никаких проблем с засорением памяти. В AS3 придется удалять ссылку на приемник специальным методом.

14) А теперь попробуйте реализовать на AS3 такой простой метод в AS1/2 как onReleaseOutside!
Скольки строчный уродец вышел?
chingachgoog
15) Кто может ответить: зачем в AS3 убили arguments.caller?
Это была мощнейшая штука в AS1/2.
Теперь в исследовательских целях надо вставлять в функцию код
Код
try {
     throw(new Error());
} catch (error:Error) {
     trace(error.getStackTrace());
}

Но именно в исследовательских - т.к. трейс происходит лишь в дебаговой версии ФП.

upd:

Начиная с версии Flash Player старше 11.4 стала доступна частичная трассировка стека и в релизной (не дебаговой) версии ФП.
chingachgoog
16) Огромнейшая дырища в политике безопасности адоба.
Адоб пыхтел несколько лет и прикладывал невероятные усилия для совершенствования политик безопасности, которые наводили ужас на флешеров:

для Loader и прочих загружаемых картинок (в т.ч. для AVM1)
Цитата
Если загруженное содержимое является изображением, его данные не будут доступны для SWF-файлов за пределами изолированной программной среды безопасности, если домен этого SWF-файла не включен в файл политики URL-адресов на исходном домене изображения.


для FileReference
Цитата
Классы FileReference и FileReferenceList ...не разрешают операции записи или чтения в отношении переданного файла. Они закрывают для SWF-файла, который инициировал отправку или загрузку, доступ к переданному или загруженному файлу или месту размещения файла на диске пользователя.


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

Однако адоб сама себя высекла: в AVM2 был добавлен невероятно мощный механизм - ByteArray (который адоб не захотела реализовать в AVM1). По недомыслию или еще по какой причине, ByteArray позволяет теперь легко обходить ограничения придуманный самим же адобом:

Для картинок с кроссдоменной непереносимостью:
Loader картинки из другой песочницы имеет неприметное свойство: Loader.contentLoaderInfo.bytes: ByteArray
Так вот, его отчего-то можно спокойно прочитать (загрузить) новым Loader-ом через loadBytes и распарсить этот Loader в битмапу
Код
new BitmapData(новый_Loader.width, новый_Loader.height, true).draw (новый_Loader)

Теперь эта битмапа доступна везде (т.е. политика безопасности в пролете)

Для загрузки через FileReference.
У FileReference есть такое же малоприметное свойство data:ByteArray
Которое также легко загружается через Loader.loadBytes (привет политике безопасности!) и например может быть распарсено в картинку для превьюшки, если выбранный файл - картинка. (по-моему на этом баге основан загрузчик картинок в популярном ресурсе "В контакте" - я там ни разу не был, но слышал smile.gif )
Rohan
Бред. Полный бред.
AS2 никто не развивает, потому что нету никакого AS2. И не было никогда. Это был тот же AS, загримированный внешне, и такой же гнилой внутри. Это был скрипт, от которого __языком__ и не пахло. Какой смысл развивать скриптовое убожество, не лучше ли набраться мужества и сделать что-то толковое с нуля? Я бы посоветовал автору не просто бросаться термином "виртуальная машина", а пойти на сайт Адоба и скачать спецификацию первой и второй VM. Почитайте, там много полезного.
По поводу "специальных" палок в колеса "разработчикам" - это уже паранойя. Уважаемый автор, дабы закрыть вопрос, void - это не класс, это базовый тип, и по договоренности обязан начинаться с маленькой буквы. Точно так же, как, к примеру, int и uint. Так что вам кажется нелогичным в действиях Адоба?
"засунуть swapDepths в Video" - "и работает же" - какая прелесть! Hello, kitty! Я аж плачу от умиления... Скажите, уважаемый автор, а в Sound или NetConnection можно засунуть? Тоже будет работать? Да и вообще, утверждение "силен тот язык, который позволяет менять родителей класса, легко и динамически" заслуживает уважения. Это прям как новые "корованы, которые можно грабить".
Что касается Garbage Collctor-а. Я этот ход, признаться, тоже использовал когда переходил на AS3. Ведь проще свалить утечку памяти на коллектор, чем признаться в кривизне собственных рук. Но это ничего, это пройдет. Главное - про деструкторы не забывать. Хорошие, качественные деструкторы.
BitmapFilterType.INNER вместо "inner" - ну это уже не к AS3, это такой красивый индикатор культуры кода автора. Константами и классами в стиле Enum пользуются, конечно же, только идиоты. И все значения констант, само собой, суровые мужики помнят наизусть.
"Испорченный хелп от адоба" - подобный стиль изложения документации используется везде. Не верите? Почитайте "документацию" по Red5, к примеру.
Про EventDispatcher промолчу. Это даже не смешно. За такое святой инквизиции сдавать надо. Только один комментарий по releaseOutside - ни_единого_раза в нормальной житейской практике мне не пришлось использовать это событие. Кроме, конечно, ДОПОЛНЕНИЯ онRollOut этим ивентом. Потому что, простите, какого-то волшебного *** onRollOut не срабатывает при зажатой кнопке мыши.
"У FileReference есть такое же малоприметное свойство data:ByteArray" - как сказал бы доктор Хаус, "все люди врут".

В качестве итога. Автору нужно пойти на форум жабаскрипт-кодеров. Его там нежно обнимут. На форум же программистов (разница между форумами понятна? или подчеркнуть?) лучше не показываться.
Всего.
chingachgoog
Цитата(Rohan @ 11.03.2009 - 03:37) *
AS2 никто не развивает, потому что нету никакого AS2. И не было никогда. Это был тот же AS, загримированный внешне, и такой же гнилой внутри.


Про AS2 я особо и не говорю. (то что я понимаю под AS2 я уже сказал - это никак не галка компилятора)
Вот AS1 намного гибче AS3.
А голословное "гнилой" - на вашей совести.

Цитата(Rohan @ 11.03.2009 - 03:37) *
Это был скрипт, от которого __языком__ и не пахло. Какой смысл развивать скриптовое убожество, не лучше ли набраться мужества и сделать что-то толковое с нуля?


AS1 - нормальный язык. В т.ч. объектно-ориентированный. Намного проще и гибче AS3.
Ну да - AS1 прототипный и что?
А вот "толкового языка" из AS3 увы пока не выходит.

Цитата(Rohan @ 11.03.2009 - 03:37) *
Я бы посоветовал автору ...пойти на сайт Адоба и скачать спецификацию первой и второй VM. Почитайте, там много полезного.


Напрасно вы считаете, что на сайте адоба я не был smile.gif Описание AVM1/2 у меня есть. Полезного там не так много как хотелось бы, но по-крайней мере хоть что-то на безрыбье. Вот, кстати в соседей ветке Механизм реального наследования в AVM2 выложил более подробное описание.

Цитата(Rohan @ 11.03.2009 - 03:37) *
По поводу "специальных" палок в колеса "разработчикам" - это уже паранойя. Уважаемый автор, дабы закрыть вопрос, void - это не класс, это базовый тип, и по договоренности обязан начинаться с маленькой буквы.


Ну так объясните "параноику" пункт 1: отчего адоб "забыла" добавить разрешение считывать метку кадра в 9-м ФП для AVM1? Ведь на уровне плеера это УЖЕ реализовано. Только сомневаюсь что у психиатра Rohan-а сможет получиться объяснение.
Про Void/void смысл в другом. Могло бы быть и VoId/void... Читайте п.3 еще раз.

Цитата(Rohan @ 11.03.2009 - 03:37) *
"засунуть swapDepths в Video" - "и работает же" - какая прелесть! Hello, kitty! Я аж плачу от умиления...


Я вас понимаю. Ведь менее гибкий AS3 не позволяет ничего подобного.
Но все же хотелось бы тут разбирать что-то поконкретнее, чем поток эмоций.

Цитата(Rohan @ 11.03.2009 - 03:37) *
утверждение "силен тот язык, который позволяет менять родителей класса, легко и динамически" заслуживает уважения. Это прям как новые "корованы, которые можно грабить".


Ну вот. Опять вместо конкретики только поток грамматический ошибок. При чем тут "кОрОваны"? При чем грабить?
Ну не может этого AS3. Ну не надо так из-за этого нервничать. Надо знать сильные стороны каждого языка.
chingachgoog
Цитата(Rohan @ 11.03.2009 - 03:37) *
Что касается Garbage Collctor-а. Я этот ход, признаться, тоже использовал когда переходил на AS3. Ведь проще свалить утечку памяти на коллектор, чем признаться в кривизне собственных рук. Но это ничего, это пройдет. Главное - про деструкторы не забывать.


Да-да. Про это еще не написал. smile.gif
Теперь надо еще деструкторы (стиральщики методов экземпляров) дополнительно писать и не забывать их активировать при удалении объекта из списка видимости. Очень "удобно"! Не то что в "гнилом" AVM1, где удалил мувик и забыл спокойно про все его методы. А теперь чтобы "кривые руки" не ленились надо дать им бубен и плясать сложный танец дабы нигде ничего не протекло. "Удобства"!

Цитата(Rohan @ 11.03.2009 - 03:37) *
BitmapFilterType.INNER ... - ...это такой красивый индикатор культуры кода автора. .... И все значения констант, само собой, суровые мужики помнят наизусть.


Какая разница что помнить: что BitmapFilterType.INNER что "inner". Последнюю запомнить легче и выглядеть это будет красивее.
Почему бы прямо и просто не сознаться в ИСТИННЫХ причинах, вместо этого юления о "культуре кода"?

Цитата(Rohan @ 11.03.2009 - 03:37) *
"Испорченный хелп от адоба" - подобный стиль изложения документации используется везде. Не верите? Почитайте "документацию" по Red5, к примеру.


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

Цитата(Rohan @ 11.03.2009 - 03:37) *
...комментарий по releaseOutside - ни_единого_раза в нормальной житейской практике мне не пришлось использовать это событие.


Что ж теперь всем всплакнуть, что у вас не было такой "житейской практики"? Ну нет аналога у AS3. Имейте мужества это признать.
Тут что - фанаты двух футбольных команд собрались? У AS1 есть сильные стороны и слабые, у AS3 есть сильные и слабые стороны. Нормальный флешер должен знать и то и другое.

Цитата(Rohan @ 11.03.2009 - 03:37) *
Цитата

"У FileReference есть такое же малоприметное свойство data:ByteArray"

- как сказал бы доктор Хаус, "все люди врут".


Что, нет такого свойства? smile.gif
http://help.adobe.com/ru_RU/AS3LCR/Flash_1...rence.html#data
Или вы нашли там описание, как это противоречит политике безопасности описанной чуть выше
http://help.adobe.com/ru_RU/AS3LCR/Flash_10.0/index.html
?

Цитата(Rohan @ 11.03.2009 - 03:37) *
В качестве итога. Автору нужно пойти на форум жабаскрипт-кодеров. Его там нежно обнимут. На форум же программистов (разница между форумами понятна? или подчеркнуть?) лучше не показываться.
Всего.


Пардон. Я другой ориентации. Обнимайтесь нежно с кем-либо еще smile.gif
А в качестве итога советую внимательно прочитать сам топик второй абзац.
И если нет, что сказать по существу вопросов, то не стоит тут флудить потоком эмоций, не мучайте себя - вы же этот форум не считаете форумом программистов?

PS
Хотя мне жаль, что Rohan не хочет вести конструктивную беседу.
Rohan
Да этот Rohan вообще редкая сволочь, если б все только нежеланием вести конструктивную беседу ограничивалось.
окей, сделаю исключение, побуду пару часов нормальным человеком.

Цитата
Вот AS1 намного гибче AS3

вон ассемблер вообще плюет на все остальные языки со своей гибкостью. То-то, я смотрю, все только на нем и пишут.
Поймите: РАМКИ созданы для ВАС, дабы помочь, облегчить жизнь, уберечь от ошибок, сделать ваш код качественным. У меня есть один знакомый - отличный программист - работали вместе. Пользуется C++/Delphi (хоть последний и не любит; но фриланс, который он практикует, штука сложная: клиент сказал Delphi - значит, Delphi). Так вот однажды его попросили написать плагин для IE на VB. Надо было видеть его глаза, полные радости, когда спустя неделю мучений я ему сказал, что есть в VB директивы option explicit и option strict.

Цитата
Ну да - AS1 прототипный и что?
А вот "толкового языка" из AS3 увы пока не выходит.

Не люблю ссылками кидаться. И не буду. Адрес гугла знаете? Там должен быть ответ на вопрос "какие недостатки у прототипного языка". Удачи.
По поводу "невыходящей толковости" - можно конкретнее? Что именно в AS3 как языке программирования вас не устраивает? Да, он далек даже от Java, но так же далек он и от первых версий экшн скрипта. Он, можно сказать, на полпути к "совершенству", разве это плохо?

Цитата
Описание AVM1/2 у меня есть

Отлично (если речь идет о том, о чем я думаю... Вы же о спецификации?)! Вам, очевидно, некуда всунуть либидо. Попробуйте написать на любом языке (именно языке, на первом экшн скрипте это попросту не получится) мини-парсер или мини-компилятор для первого и третьего экшн скриптов. Что-то не очень сложное, пусть совсем базовое. Вам должно понравится. Сразу замечаешь разницу. И уж поверьте, это не пустые слова, я это правда делал. Жду результатов wink.gif

Цитата
Ну так объясните "параноику" пункт 1: отчего адоб "забыла" добавить разрешение считывать метку кадра в 9-м ФП для AVM1? Ведь на уровне плеера это УЖЕ реализовано. Только сомневаюсь что у психиатра Rohan-а сможет получиться объяснение.

Я, простите, не психиатр. Я - RIA developer с высоким ЧСВ. Ху*цы не предлагать, у меня слишком много тестостерона, я на такое не соглашусь.

Цитата
Про Void/void смысл в другом. Могло бы быть и VoId/void... Читайте п.3 еще раз.

не смешите меня!!! В чем же??? Конкретно??? Просто "на зло"? Да спросите вы у Адоба, они на письма отвечают. void - тип базовый, это не класс, по правилам хорошего тона называть его с большой буквы не принято. VoId - это вообще маразм, ни один вменяемый человек такое название использовать не будет. Большие буквы в именах применяются для разделения слов: BitmapFilter, NetConnection, но уж никак не SoUnd.
Rohan
Цитата
Я вас понимаю. Ведь менее гибкий AS3 не позволяет ничего подобного.

т.е. первый экшн скрипт все-таки позволяет успешно засунуть swapDepths в класс Sound? А что эта штуковина, если не секрет, делать будет? Прошу исходник в студию. Очень хочется посмотреть на то, как звуки глубиной меняются.

Цитата
Ну вот. Опять вместо конкретики только поток грамматический ошибок. При чем тут "кОрОваны"? При чем грабить?

Вам, наверное, 14? Ссылку давать не буду, погуглите по запросу "грабить корованы". Это классика, уважаемый. Читайте больше книжек (не технических), что ли?
З.Ы. наверное, напрасно, но все же надеюсь услышать извинения от автора за обвинение в кривизне моего языка. Ну и "спасибо" за культурное просвещение.

Цитата
Теперь надо еще деструкторы (стиральщики методов экземпляров) дополнительно писать

Их надо было писать всегда по всем правилам. Снесенный вами муви клип все равно оставит после себя кучу мусора, как, например, интервалы в памяти. Писать что на AS2 что на AS3 без деструкторов - это сумасшествие. Любой большой проект вас просто заставит это делать.

Цитата
Какая разница что помнить: что BitmapFilterType.INNER что "inner"

Представьте что у вас 100 констант (например, айдишники тегов, если решитесь писать какой-нить парсер). Вы сможете сказать, какой тег помечен константой 34? А как насчет, к примеру, TAG_SHOW_FRAME? Какой вариант понятнее?

Цитата
А мне не надо "везде", когда у меня есть замечательный стиль хелпа от макромедии по AS. Каждое свойство - отдельная страница хелпа.

А я хочу быть ген. директором Интерпайпа. Увы, остальному миру плевать на мои потребность. Мне, к примеру, новый стиль хелпа больше нравится. Это - штука субъективная, тут даже спорить глупо. Каждому свое, но это не делает вещи правильными или неправильными.

Цитата
Что ж теперь всем всплакнуть, что у вас не было такой "житейской практики"? Ну нет аналога у AS3. Имейте мужества это признать.

в AS3 нет готового аналога onReleaseOutside. Счастливы? А AS2 кружочки рисовать не умеет. Это так важно?

Цитата
Классы FileReference и FileReferenceList ...не разрешают операции записи или чтения в отношении переданного файла. Они закрывают для SWF-файла, который инициировал отправку или загрузку, доступ к переданному или загруженному файлу или месту размещения файла на диске пользователя.

Свойство .data появилось в десятом флеш плеере, как то и обещали. Оно создано для работы метода .load, которого раньше не было. И все ограничения на доступ к содержанию файла идут с тех времен, со времен девятого плеера (который поддерживает только методы upload и download). Логично что они больше не действуют с добавлением метода .load
chingachgoog
Цитата(Rohan @ 11.03.2009 - 17:21) *
Поймите: РАМКИ созданы для ВАС, дабы помочь, облегчить жизнь, уберечь от ошибок, сделать ваш код качественным.


Да, горе-популяризатор AS3 Мук так примерно и расписывает. Типа меня загнали в жесткие рамки ради моего же блага. Ну-ну.
Не слишком сильный аргумент, не так ли? Я даже тут спорить не буду - для кого-то стенки тюрьмы кажутся благом.
Однако есть факт - AS1 гораздо гибче, чем AS3. Этот факт может нравится или нет, на него можно по-разному смотреть, но он останется фактом.

Цитата(Rohan @ 11.03.2009 - 17:21) *
Адрес гугла знаете? Там должен быть ответ на вопрос "какие недостатки у прототипного языка". Удачи.


Ага. Не забудьте там же посмотреть "преимущества прототипного языка".

Цитата(Rohan @ 11.03.2009 - 17:21) *
По поводу "невыходящей толковости" - можно конкретнее?


А эта ветка для чего? Тут как раз конкретности. Хотя и со стороны AS1. Но вы можете написать со стороны языков ООП на классах.
Вас все устраивает? Почему бы тут не написать, что вас не устраивает?

Цитата(Rohan @ 11.03.2009 - 17:21) *
...Он, можно сказать, на полпути к "совершенству", разве это плохо?


А где я писал, что AS3 - это плохо???

Цитата(Rohan @ 11.03.2009 - 17:21) *
Отлично (если речь идет о том, о чем я думаю... Вы же о спецификации?)! Вам, очевидно, некуда всунуть либидо. Попробуйте написать...
...Я, простите, не психиатр. Я - RIA developer с высоким ЧСВ. Ху*цы не предлагать, у меня слишком много тестостерона, я на такое не соглашусь.


Неужто не психиатр? А так много про либидо и тестостерон знаете  tongue.gif
Но ответ характерен: странные люди (у которых при слове AS1 случается апоплексический удар) не могут ответить, почему адоб "забыла" добавить в AS1 УЖЕ ГОТОВУЮ возможность считывания метки кадра. Они ответ-то знают, но бояться его произнести вслух, а тех кто произносит, тут же объявляют параноиками...

Цитата(Rohan @ 11.03.2009 - 17:21) *
не смешите меня!!! В чем же??? Конкретно???


См. п. 3 еще раз. Если не дойдет - повторить еще раз. smile.gif
chingachgoog
Цитата(Rohan @ 11.03.2009 - 17:24) *
т.е. первый экшн скрипт все-таки позволяет успешно засунуть swapDepths в класс Sound?


Вижу сильно не понравилась Rohan-у эта великолепная возможность AS1! smile.gif
По существу возразить не может, но очень хочется - занялся абсурдом с Sound. Успехов.
А остальные могут посмотреть еще такое:
Текстовое поле не дублицируется? Неужели?

Цитата(Rohan @ 11.03.2009 - 17:24) *
З.Ы. наверное, напрасно, но все же надеюсь услышать извинения от автора за обвинение в кривизне моего языка. Ну и "спасибо" за культурное просвещение.


Извинения принести совсем не трудно. Как только будет ссылка на "классику". Только сразу предупреждаю - именно потому, что мне не 14, я по-албански не читаю.

Цитата(Rohan @ 11.03.2009 - 17:24) *
Их надо было писать всегда по всем правилам. Снесенный вами муви клип все равно оставит после себя кучу мусора, как, например, интервалы в памяти.


Интервалы никогда не находились в мувиках. Пример не удачный. Ждем-с еще примеров.
(про то, что интервалы почти всегда можно заменить таймаутами я даже не вспоминаю)

Цитата(Rohan @ 11.03.2009 - 17:24) *
Писать что на AS2 что на AS3 без деструкторов - это сумасшествие.


Все же вы продолжаете карьеру психиатра?
Примерчика-то для AS1 где так необходим деструктор не найдется?

Цитата(Rohan @ 11.03.2009 - 17:24) *
Представьте что у вас 100 констант


Представить можно все что угодно. Что есть мега проект с 3000 флешеров... И что?
Где в AS3 100 констант?
Зачем кучу лишних классов разводить? (про которые адоб потом хвастается, что мол в AS3 много новых классов появилось)
Опять для моего удобства?

Цитата(Rohan @ 11.03.2009 - 17:24) *
Мне, к примеру, новый стиль хелпа больше нравится. Это - штука субъективная


Здесь согласен. Это вещь субъективная (как и удобство записи констант заглавными буквами).
Но вещь эта отвечает теме топика (мое видение). Если вам нравится новый хелп, то я за вас рад. Мне - не нравится.

Цитата(Rohan @ 11.03.2009 - 17:24) *
в AS3 нет готового аналога onReleaseOutside. Счастливы? А AS2 кружочки рисовать не умеет. Это так важно?


Это и есть вопрос топика.
Если AS3 умеет кружочки рисовать - со мной не случится апоплексического удара, что в AS1 этого нет. Как, впрочем и в случае того, что в AS3 нет onReleaseOutside, а в AS1 он есть.

Цитата(Rohan @ 11.03.2009 - 17:24) *
Свойство .data появилось в десятом флеш плеере


Ну наконец-то заметили! А то сразу "люди врут"...

Цитата(Rohan @ 11.03.2009 - 17:24) *
И все ограничения на доступ к содержанию файла идут с тех времен, со времен девятого плеера (который поддерживает только методы upload и download). Логично что они больше не действуют с добавлением метода .load


Я так понял вам больше нравиться версия, что адоб лоханулись с хелпом, чем версия, что они лоханулись с безопасностью?
А как быть со свойством contentLoaderInfo.bytes? Оно тоже только в 10-е появилось?
chingachgoog
17) Зачем в AS3 убили восьмеричную запись чисел? Кому она мешала?
Наоборот, еще со времен AVM1 не хватало двоичной записи, а теперь и вовсе...

NB!
Нехватку двоичной записи на AS1 я решил легко:
Код
_global.__resolve=function (name) {
    if (name.charAt(0)=='b'){
        var z=name.slice(1)
        return parseInt(z,2)
    }
};

myBinary=b10010011+20
trace(myBinary)


Но для AS3 не все так просто. Про __resolve и _global напишу позже.
Rohan
 маразм крепчает
Ок, пойдем по пунктам.
Итак, пункт раз.
Константы.
Вот выдержка из моего кода, класс TagParser для парсинга swf-файлов.

Код
    static public const PLACE_OBJECT:int             = 0x4;
    static public const PLACE_OBJECT2:int         = 0x1A;
    static public const PLACE_OBJECT3:int         = 0x46;
    static public const REMOVE_OBJECT:int         = 0x5;
    static public const SHOW_FRAME:int             = 0x1;
    static public const DEFINE_SHAPE:int             = 0x2;
    static public const DEFINE_SHAPE2:int             = 0x16;
    static public const DEFINE_SHAPE3:int             = 0x20;
    static public const DEFINE_SHAPE4:int             = 0x53;
    static public const DEFINE_SPRITE:int             = 0x27;
    static public const DEFINE_BITS:int             = 0x6;
    static public const DEFINE_BITS_JPEG2:int         = 0x15;
    static public const DEFINE_BITS_JPEG3:int         = 0x23;
    static public const DEFINE_BITS_LOSSLESS:int     = 0x14;
    static public const DEFINE_BITS_LOSSLESS2:int     = 0x24;
    static public const DEFINE_BUTTON:int         = 0x7;
    static public const DEFINE_BUTTON2:int         = 0x22;
    static public const DEFINE_FONT:int             = 0xA;
    static public const DEFINE_FONT2:int             = 0x30;
    static public const DEFINE_FONT3:int             = 0x4B;
    static public const DEFINE_TEXT:int             = 0xB;
    static public const DEFINE_TEXT2:int             = 0x21;
    static public const DEFINE_EDIT_TEXT:int         = 0x25;
    static public const DO_ABC:int                = 0x52;
    static public const DEFINE_CONFIG:int            = 0x700;
    static public const DEFINE_RAW_DATA:int        = 0x701;


Итак, пытаемся закрыть этот вопрос: глупо ли было прописывать все эти константы? Может, было проще пользоваться числами? Запоминать их все?
Уважаемый автор, ДА или НЕТ? Облегчили ли все эти константы дальнейшую жизнь, или стоило запомнить числа?
Если "да", вы признаете что константы есть хорошо, и снимаете вопрос о "лишних классах".
Может, я и правда в психологии людей шарю? Почему-то я наперед предвкушаю что-то из серии "...это ерунда, автор идиот, здесь констант много, но есть случаи когда их всего несколько, зачем это..."
Если в вашем следующем посте я не вижу ответа на свой вопрос (булевого значения: true или false, да или нет, 1 или 0; двоичная логика) - для меня это сигнал остальные пункты не разбирать.
chingachgoog
Цитата(Rohan @ 11.03.2009 - 20:43) *
Итак, пункт раз.
Константы.
...
Если "да", вы признаете что константы есть хорошо, и снимаете вопрос о "лишних классах".


Читаем п. 11 внимательно.
Речь НЕ СТОЛЬКО о самой записи констант в виде заглавных букв с подчеркиванием (мне это неудобно и в большинстве случаев мне удобнее тут конкретное значение вписать, но кому-то удобнее так - не суть), СКОЛЬКО О выделении новых классов, для записи констант и прочей мелочевки.
Теперь надо еще и импортировать эти классы. И прописывать название этого "нового" класса. И это еще удлинит и так громоздкую запись с константой. (см. п. 11).
В этом суть вопроса, а не в том нужны или нет константы.
Rohan
Попросту тратить силы не собираюсь.
Автор отказался ответить на вопрос.
Вопрос снят. Слово свое я сдержу, вести дальше этот нелепый разговор с человеком, не желающим играть по правилам (во всех смыслах) я не буду.
chingachgoog
Цитата(Rohan @ 11.03.2009 - 23:25) *
Слово свое я сдержу, вести дальше этот нелепый разговор ... я не буду.


Я согласен с мужественным решением Rohan-а - если нечего сказать по существу темы, кроме флуда и истерик, то лучше эту тему покинуть, чтобы не выглядеть нелепо.
Только не понимаю, зачем это надо было делать так кокетливо? Ведь все, кто читал классику (не албанскую) знают, что на вопрос "вы уже бросили пить коньяк по утрам?" не существует булевого ответа.

Ну да ладно. Теперь можно спокойно перейти к обсуждению по существу.
MustLive
Rohan

Рад тебя видеть на форуме, давно тебя не было. Ты заходи почаще, интересные темы на форуме для тебя найдутся wink.gif.

Цитата
Я согласен с мужественным решением Rohan-а - если нечего сказать по существу темы, кроме флуда и истерик, то лучше эту тему покинуть, чтобы не выглядеть нелепо.

Rohan и chingachgoog, ребята не сорьтесь. И не ругайтесь (в тех или иных формах) на форуме - ведите себя прилично.

Цитата
В свое время в сети попалась презентация "50 причин перейти на AS3", так, что тут будет (со временем) нечто вроде контрответа, а также разбор отличий AVM1 (AS1/AS2) от AVM2 (AS3).

chingachgoog

В этой теме я вижу ты больше сосредоточился на контрответе. Со временем также удели внимание разбору отличий между различными версиями AS и AVM. И для этого тебе стоит открыть новую тему, чтобы не смешивать всё вместе - и критику AS3 (исходя из названия темы), и спокойное сравнение всех версий AS.
chingachgoog
Откровения Lee Brimelow из адоба, или 6 причин использовать AS3:

Цитата
1. Your skills will be in high demand
This, in my opinion, is the main reason anyone who currently works or is planning to work as a Flash developer should switch to the new language. All major Flash work is now exclusively being built in ActionScript 3.0. You just don't see many jobs looking for ActionScript 2.0 skills. So if you plan on working with Flash in your job, learning ActionScript 3.0 is essential.


Совершенно согласен с господином Ли: адоб ЗАСТАВЛЯЕТ переходить на AS3 именно профессионалов. В ближайшем будущем профессионалам ПРИДЕТСЯ перейти на AS3 хотят они того или нет.

Цитата
2. Everything you build will be faster
Developers who have been working with Flash for a while have often been frustrated that our new, super-cool idea just couldn't run smoothly because of the limitations of Flash Player. ActionScript 3.0 offers up to a 10-fold increase in performance over previous versions of the language. In some cases, the performance has increased even more. This means you can control more objects on the Stage at the same time. If you want your project to look and perform at its best, moving to ActionScript 3.0 is the ultimate way to achieve this goal.


А вот тут господин Ли крепко приврал. Кое-что, действительно на AVM2 летает быстрее и даже в десятки раз. Но вовсе не "всё", как вещает Ли, а совсем даже наоборот - лишь некоторые вещи. (такие как типизированные целые числа) Большинство вещей (так нужная всем отрисовка) ускорению не поддалась.

Цитата
3. There's an abundance of new APIs
As Flash developers, we love nothing more than getting new toys to integrate into our projects. ActionScript 3.0 includes hundreds of new APIs for working with things like XML, regular expressions, and binary sockets. Even better, the whole language has been reorganized into packages and namespaces that make it much easier to find specific language features. When you use ActionScript 3.0, your Flash toolbox is not only much fuller, it is also better organized.


Никто не спорит с тем, что AVM2 имеет гораздо больше возможностей, чем AVM1. Но тут вообще нет НИКАКОЙ заслуги AS3. Это "заслуга" именно самого адоба, что они решили прикрыть AVM1 (а сней и AS1/2). Не сомневаюсь, что оставь адоб развитие AVM1 и сделав бы ее возможности сходные с AVM2, то мало кто из группы "interactive designers" (а это самая многочисленная группа) перешел бы на AS3. Но эти люди теперь смотрят п.1 от господина Ли...
А вот тезис о большей "удобности" новых пакетов и их "лучшей организованности", мягко говоря, весьма спорен.

Цитата
4. The display list rocks
One of the biggest changes in ActionScript 3.0 is the way Flash handles visual objects in a movie. In previous versions of the language, it was practically a black art to manipulate the display order (depth) of the items in a Flash movie. A large number of hacks and workarounds existed that didn't make any sense to beginners starting to use the language. For instance, it was common practice to place visual assets at an extremely high depth in order to keep them on top of everything else in a movie. This led to a lot of problems in larger projects and required a lot of manual depth management work. The new display list in ActionScript 3.0 is a straightforward mechanism that handles how visual assets are rendered in your movie. Once you start using it, you'll wonder how you ever developed a project without it.


Ну что тут скажешь? Да, господин Ли прав - список отображаемых объектов - самое большое полезное изменение в AS3. Теперь можно то, что в AVM1 было абсолютно невозможно - просто переносить мувики из одного в другой (не совсем так, но суть ясна). Но опять господин Ли не преминул солгать: работа с глубинами в AS1/2 как раз была проста и интуитивно понятна. Никаких трудностей она не представляла, тогда как в AS3 появляются огромные проблемы (см. выше пункты основного топика) связанные с виртуальностью списка отображения. За все приходится расплачиваться...

Цитата
5. The object-oriented structure is better
Developers particularly love the improved object-oriented structure of ActionScript 3.0. It includes things like runtime typing, sealed classes, packages, namespaces, and an overhauled event model. Programming in ActionScript 3.0 is on the same level as writing in other high-level languages like Java and C#. The new features in ActionScript 3.0 also make your code more modular, readable and extendable. Some of these features may not be used much, if at all, by interactive designers—but it is good to know that if you want to get into more advanced programming someday, the language structure is there to support you.


Тут господин Ли забыл объяснить, что ООП включает в себя не только ООП на классах, но и на прототипах. Да - с точки зрения ООП на классах AS3 стал более "правильным". Но исконный AS - ООП на прототипах. AS3 вместе с адобом забил на прототипы и огромнейшие преимущества этого подхода в ООП. Да, программисту C# легко перейти на AS3 - только вот вопрос: а зачем ему переходить на AS3, когда есть WPF?

Цитата
6. It's more enjoyable to work with ActionScript 3.0
This may sound subjective, but I believe it is absolutely true. Ask anyone who knows ActionScript 3.0 to go back and program a project in ActionScript 2.0 and they will surely cringe at the idea. Previous versions of the language were filled with so many bugs, hacks, and workarounds that working in ActionScript 3.0 seems almost too easy in comparison. ActionScript 3.0 does take a bit of getting used to, but the rewards are well worth the effort.


Конечно, это субъективно  tongue.gif Причем два раза: господин Ли сравнил AS3 с AS2 - но не с AS1. И это неспроста. AS2 был изначально рассчитан на тех, кто хотел бы перейти на Cи-подобные языки (на ООП на классах) - а таких как раз меньшинство (господин Ли называет их гордо "hardcore developers"). А остальные как раз не мучались с извращением AS2, а продолжали использовать мощь прототипов на AS1 напрямую, а не через псевдоклассы (господин Ли пренебрежительно называет это хаками и багами).

Цитата
Why does ActionScript 3.0 require more code than ActionScript 2.0?
...While it is true that ActionScript 3.0 requires a couple more lines of code...


Ну тут все ясно. Без комментариев.
chingachgoog
18) Жесткий override
В AS1 очень легко было создавать наследуемые классы с одинаковыми именами свойств и методов. Ничего удивительного тут нед - цепочка видимости проходила по цепочке наследования.
В AS3 одинаковые методы (имена методов) ОБЯЗАНЫ предваряться словом override!
То, что в AS1 было простым:
Код
function MySuperClass(){}
function MySubClass(){}

MySuperClass.prototype.getName=function(){
    trace("MySuperClass")
}
MySubClass.prototype.getName=function(){
    trace("MySubClass")
}

MySubClass.prototype.__proto__=MySuperClass.prototype

Стало более сложным и строгим:
Код
package{
    public class MySuperClass {
        public function getName(){
            trace("MySuperClass")
        }
    }
}

Код
package{
    public class MySubClass extends MySuperClass{
        public override function getName(){
            trace("MySubClass")
        }
    }
}

Без этого (без разрешения компилятора) swf не удастся собрать. Хотя, возможно, интерпретатор AVM2 такой код и понял бы.
Хотя можно отменить наследование метода, расположив метод в пространстве имен private . В этом случае разрешение компилятора (в ввиде override) не потребуется.
override плох тем, что ОБЯЗЫВАЕТ использовать ту же самую конструкцию метода (число аргументов, тип возвращаемого значения), что и в суперклассе. Про гибкость AS1, когда метод подкласса с тем же именем, что и в суперклассе, мог иметь другую конструкцию (число аргументов, тип возвращаемого значения) можно забыть.
Если же программист оставил в суперклассе атрибут final, то вообще невозможно добавить в подкласс метод с тем же именем.

19) override возможен только у методов, но не у переменных (свойств). Из-за этого свойства приходиться прятать в private пространстве имен. Без этого компилятор опять-таки не разрешит сборку swf.
(Конечно, можно сделать эмуляцию свойств с тем же именем, при помощи методов get/set)
Разумеется ничего подобного не было в AS1, где легко и просто создавались не только методы, но и свойства с одинаковыми именами, безо всяких конфликтов между собой.

20) Убогий super
super в AS3 можно выполнить только внутри описания класса.
А что делать, если мы хотим из экземпляра класса вызвать метод, который у нас уже перезаписан? Синтаксис экземпляр.super.метод() невозможен. Поэтому остается лишь ДОБАВИТЬ НОВЫЙ метод в класс, где (в методе) будет использоваться super
Неужели в AS1 можно было писать экземпляр.super.метод()? Практически да!
Разумеется само командное слово super использовалось также - в методе функции класса или ее конструкторе. Но можно было написать:
Код
экземпляр.__proto__.__proto__.метод()


И вуаля - любой экземпляр подкласса может использоваться как экземпляр своего суперкласса (квинтессенция полиморфизма).

21) Кстати о полиморфизме.
Например, Мук на с. 156 (своей книги по AS3) дал такое определение полиморфизму (см. п.20 выше), а потом долго показывал примеры из которых вовсе не следовало это определение! Много разговоров про интерфейсы, оверрайды и суперы, но ни одного примера, когда экземпляр подкласса используется ВМЕСТО экземпляра суперкласса.
Ну да, можно создать НОВЫЙ метод в подклассе, где super будет вызывать переписанный (override) метод суперкласса.

Если же взять еще более абстрактное определение полиморфизма - это некий одинаковый код, который при разном наследовании дает разные результаты, то тут AS3 вообще не у дел. Например, такое в AS3 в принципе НЕВОЗМОЖНО:

Код
function Polymorph(){
}
Polymorph.prototype.getAngle=function(angle){
    trace(this.getSin(angle))
}

function Degree(){
}
Degree.prototype.getSin=function(angle){
    function convert(){
        return angle*Math.PI/180
    }
    return Math.sin(convert())
}

function Radian(){
}
Radian.prototype.getSin=function(angle){
    return Math.sin(angle)
}

obj=new Polymorph()

Polymorph.prototype.__proto__=Degree.prototype
obj.getAngle(90) // 1
obj.getAngle(Math.PI/2) // 0.0274121335920443

Polymorph.prototype.__proto__=Radian.prototype
obj.getAngle(90) // 0.893996663600558
obj.getAngle(Math.PI/2) // 1
chingachgoog
22) Немного об ECMAScript.
Несмотря на широко распространенное заблуждение, что AS3 наиболее близок с спецификации ECMAScript - это далеко не так.
Это легко понять, если посмотреть пространства имен для компилятора:
1) as3 - тут все понятно (по умолчанию true)
2) es - не что иное, как пространство имен  ECMAScript (по умолчанию false!)
Адобовцы вобщем-то пишут об этом сами:
Цитата
Для совместимости со спецификацией языка ECMAScript, на которой основан ActionScript, требуется наследование прототипов, то есть методы и свойства базового класса должны определяться в объекте прототипа класса.

Но это наследование (на основе прототипов) в AS3 выполнено крайне убого и по-видимому лишь "для галочки", т.е. лишь для "совместимости со спецификацией языка ECMAScript". Мне пока не понятна такая зацепка за ECMAScript. Ну сделали аналог си шарпа, чего тогда за ECMAScript цепляться? Ведь вся мощь прототипного стиля в AS3 убита - нет __proto__ (т.е. через экземпляр класса к прототипу не обратишься).
IDVsbruck
Специально даже зарегился на форуме, чтобы была возможность ответить в ветке.

Я очень уважаю людей, объективно мыслящих (про профессионализм молчу). Например, столкнулся с человеком, который пишет на С и отзывается о Джаве: пункт такой-то - велколепная реализация, пункт такой-то - из версии в версию совершенствуется, пункт Н - не ожадал такой халтуры и т.д. Мне понравился его вывод: в целом то-то и то-то мне очень понравилось, был бы счастлив видет это "то-то" в С, но переходить не хочу и не буду исключительно из-за отношения к продукту, многолетнему отношению и преданности к С. И я его понимаю и признателен, так как сам джавист - не оспаривает многие зачастую очевидные вещи, но позиция остается прежней.

Пункты chingachgoog в подавляющем большинстве своем - возможно, не бред, но слегка напоминает ... И доводы бестолковые.
Я сам ранее "сидел" на AS2 и постоянно бесила его бесформенность и "гибкость", практически отсутствие стандартизации, присущей скриптовым языкам. То, что для меня он был практически на одном уровне с JavaScript, это точно - вроде неплохо, пользуешься и используешь, но "серьезности" не ощущаешь. Вот для кого он очень удобен - это дизайнеры: код не очень любят, да и не очень нужен, а если что - можно и в кадр запихнуть. А эта работа с событиями: хочешь так, хочешь эдак (5 способов!) ... а потом вылазит: и оттуда, и отсюда. Наконец-то навели порядок, чему бесконечно рад: если язык объектно-ориентирован, то и подчиняться он должен законам ООП.

Нужен мультик или баннер - это AS2, что-либо "посерьезней" - AS3. Но сравнивать, да еще с преимуществом первого - это форменный идиотизм. Штамповка "причин не любить" говорит явно не в пользу топикстартера.

Rohan, респект за объективный подход и грамотное высветление чужих заблуждений ... а то вдруг люди (новички, т.к. знающие и так знают) усомнятся в развитии языка в правильном направлении.
chingachgoog
IDVsbruck, спасибо, что заинтеросовались этой веткой.
Надеюсь, что у вас будет, что сказать по существу вопроса.

Цитата(IDVsbruck @ 28.04.2009 - 21:06) *
А эта работа с событиями: хочешь так, хочешь эдак (5 способов!) ... а потом вылазит: и оттуда, и отсюда.
Наконец-то навели порядок, чему бесконечно рад


Не понимаю. Выбираете один способ, который вам нравится и работаете с ним. Ничего "вылезать" не будет.
А "порядок" заключается в том, что попросту закрыли другие возможности, которые, возможно, для других были очень удобны? Так это не порядок называется, а совсем по-другому.

Цитата(IDVsbruck @ 28.04.2009 - 21:06) *
если язык объектно-ориентирован, то и подчиняться он должен законам ООП.


AS1 полностью объектно-ориентированный язык. Какие тут могут быть проблемы с "законами ООП"?

Цитата(IDVsbruck @ 28.04.2009 - 21:06) *
Нужен мультик или баннер - это AS2, что-либо "посерьезней" - AS3. Но сравнивать, да еще с преимуществом первого - это форменный идиотизм.


AS2 - это всего лишь другая обертка AS1. Разницы между AS1 и AS2 на уровне байт-кода нет никакой (у AS2 он чуть более громоздкий).
AS2 (код во внешних файлах с использованием слова class) как язык я тут даже не рассматриваю. После выхода AS3 в таком стиле (ООП на классах) имеет смысл программировать лишь на AS3. А AS2 знать лишь постольку, поскольку он может встретиться в проектах, с которыми придется работать.
А вот фраза, что AS1 и сравнение AS3 с AS1 - "это форменный идиотизм" требует доказательств. Пока это голословное утверждение целиком на совести IDVsbruck. Тем более ни один пункт из перечисленных выше не рассмотрен.

Цитата(IDVsbruck @ 28.04.2009 - 21:06) *
а то вдруг люди (новички, т.к. знающие и так знают) усомнятся в развитии языка в правильном направлении.


Новичкам надо знать (а остальные, исключая, верующих, и так знают): профессионалам придется учить AS3, но это вовсе не означает, что развитие языка идет в правильном направлении. Все "преимущества" AS3 заключаются не в силе AS3 как языка, а лишь в том, что у AVM2 есть преимущества над AVM1 (реальные и без шуток).
Rohan
Цитата(IDVsbruck @ 28.04.2009 - 21:06) *
Rohan, респект за объективный подход и грамотное высветление чужих заблуждений ... а то вдруг люди (новички, т.к. знающие и так знают) усомнятся в развитии языка в правильном направлении.

Добро пожаловать в клуб людей, понимающих, что король-то голый smile.gif Приятно осознавать, что я - не одинок.
З.Ы. тот факт, что в этой теме больше никто ничего не говорит, означает, на мой взгляд, одно: народу глубоко, простите, по*уй нечеловеческие старания бедняги, пытающегося доказать что копейка круче Q7 - топлива-то меньше жрет. Кто в состоянии позволить себе Q7 - ездят на Q7.
skanner
Ребята, я вот почитал тут ваш баталии и прям скажу что немного растерялся, я с  ActionScript совсем не знаком ни с 1 ни с 2 и 3, вот хочу начать учить, есть литература Мука по AS2 и AS3, по этому спрашиваю вас - что лучше начинать учить с нуля? Боюсь что пока я хоть немного начну понимать в AS2  то уже будет AS4 если не AS5 smile.gif
Может сразу начинать с третьего или все же необходимо знать второй чтобы понимать в чем суть языка, что посоветуете?
chingachgoog
Цитата(skanner @ 2.05.2009 - 21:29) *
...я с  ActionScript совсем не знаком ни с 1 ни с 2 и 3, ...по этому спрашиваю вас - что лучше начинать учить с нуля?


Учите тогда сразу C# и как раз к распространению WPF (и ее частности вроде сильверлайта) успеете. А зная C# вы легко сможете перейти на AS3 (только сомневаюсь, что захотите).
Если же выбирать из  AS, то учите AS3 и уж точно не учите AS2 (хотя неплохо знать AVM1 и ее язык AS1). Причем надо еще взвесить нужен ли вам ООП стиль. Если нет, то большинство книжек по AS3 вам не нужны - достаточно русского хелпа. (я видел много коммерческих буржуинских проектов на AS3 где не используется ООП и код написан на таймлайне).

add:

А вообще я предпочитаю учить не язык, а базис на котором он основан - в данном случае AVM. Когда я разобрался с AVM1 мне сразу полностью понятны стали и  AS1 и AS2. Поэтому даже если и выйдет AS4, то вряд ли выйдет AVM3 и есть смысл изучать именно AVM2. (см. отдельную мою тему по AVM2).
chingachgoog
23) Писать код на таймлайне можно, но только очень осторожно...
Хотя адоб и ее представители и утверждают, что мол для тех, кто пишет код в кадрах ничего не поменялось, мягко говоря - это не так.

Код на таймлайнах в AS3 преобразуется (автоматически) в код класса таймлайна (см. п.6).
Поэтому то, что было раньше доступно в AS1/2 теперь невозможно без хитрости в AS3:

Например такой код был возможен в AVM1 в первом фрейме таймлайна
Код
function a(){}

И этот же код можно было повторить во 2-м фрейме, третьем и т.п. Т.е. можно было переназначить непосредственно функцию.

В AVM2 компилятор такого не позволит.
Надо делать по-другому (создавать указатель на анонимную функцию):

в первом кадре объявть переменную (строго с ключевым словом var)
Код
var a=function(){}

В остальных кадрах можно менять значение этой переменной (давать другую безмянную функцию). Естественно второй раз использовать ключевое слово var уже нельзя.

Код
a=function(){}


Отсюда же и возможные грабли:

/forum/index.php?showtopic=3089

add:

PS
подробнее тут
chingachgoog
24) Глобальный объект и глобальная видимость.

Сразу скажу, что объект Global в AVM2 есть и его не может не быть (туда, например записываются ссылки на классы, как это и было в AS2). Естественно есть и глобальная видимость.
Однако. Дяди из адоба не любят простых решений. Ссылка на объект Global (типа _global) исчезла. Зато появились другие "радости жизни":
- Нельзя напрямую обратиться к глобальному свойству, наподобие
Код
_global.имя_моего_свойства

надо ждать пока флеш-плеер просмотрит ВСЮ область видимости и дойдет до глобального объекта.
Это же рождает проблему с неоднозначностью имен.
- Флеш-плеер просматривает именно ВСЮ область видимости. Т.е. если в AVM1 флеш-плеер успевал находить нужное имя на одном из этапов проверки цепочки имени, то далее цепочка не проверялась и время на дальнейшую проверку не тратилось. В AVM2 если имя нашлось, то продолжается поиск имен до самого конца цепочки (глобального объекта)
- Задать глобальное свойство/функцию/класс становиться невероятно сложно. На КАЖДОЕ свойство/функцию/класс надо написать ОТДЕЛЬНЫЙ ФАЙЛ .as c ТЕМ ЖЕ ИМЕНЕМ что и видимое внешнее (внутри блока безымянного пакета package  с пространством имен public
Файл свойство1.as
Код
package {
    public var свойство1="значение1"
}

Т.е. если таких свойств/функций у вас десять - то будет нужно десять отдельных .as файлов.
- По этой же причине задать глобальное свойство с таймлайна невозможно

Что же предлагают дяди из адоба взамен _global? А ничего хитрого. Задавайте говорят статическое свойство некоторого глобального (в безымянном пакете) класса.
А потом обращайтесь к нему через имя этого класса! Надо же какая "глобальность" выходит...
chingachgoog
25) Они убили watch()...
Нету его теперь:
Цитата
watch() Метод
Удалено
Используйте свойства средств доступа (функции get/set) или класс flash.utils.Proxy для достижения аналогичной функциональности.

Конечно, "аналогичная функциональность" - это хорошая мина, при плохой игре. Метод watch - очень мощная и удобная штука на AVM1.
Причем работающая ПО-ДРУГОМУ, чем геттеры и сеттеры (на AVM1 они задавались через addProperty() ) Неужели писатели "хелпа" этого "не знали"?
Кстати, смешна причина, по которой хелпописателям пришлось вспоминать про класс Proxy - там есть подобие addProperty() под названиями getProperty и setProperty - просто по-другому ДИНАМИЧЕСКИ задать геттеры и сеттеры в AVM2 НЕЛЬЗЯ! Геморрой с использованием Proxy еще тот (см. подробнее далее, когда я дойду до __resolve).
От безысходности многие в сеттер добавляют dispatchEvent - тоже вариант.
chingachgoog
26) Нет глобальных событий (например, мыши)
...Геморрой с глобальностью продолжается...

Ну нет и все! Мук с досады предлагает регистрировать приемник событий мыши на stage.
Но только это не решение, а фигня полная:
- во-первых придется писать ДВА обработчика (на фазе захвата и на фазе обработки с игнорированием фазы подъема) - догадайтесь почему smile.gif
- во-вторых, и это самое печальное для сетевых флешек, ФП для AVM2 не захватывает событие скролла, например. И html-страница скролиться ВМЕСТЕ с тем, что должно скроллиться только в ФП.
Последняя проблема сейчас решается тем, что добавляется слушатель глобальных событий (мыши) на AVM1, который по LC передает это ролику на AVM2.

PS

В случае с глобальным событием обработчиков клавиатуры - все гораздо хуже. Стейдж теряет фокус при добавлении новых объектов в лист отображения! Надо заново устанавливать ему фокус, для поимки KeyboardEvent.
MustLive
Цитата
26) Нет глобальных событий (например, мыши)

Да, это жёстко.

Цитата
Последняя проблема сейчас решается тем, что добавляется слушатель глобальных событий (мыши) на AVM1, который по LC передает это ролику на AVM2.

Т.е. люди страдают различными геморроями, для того чтобы пропатчить новые "возможности" флеша, исключительно из-за маразма Адоба. Замечу, что Макромедия такими маразмами не страдала (от 1 по 8 версию флеша). Адоб местами сильно перегнула палку.

Посмотрим как флеш будет развиваться дальше. И не исправит ли Адоб во флеше 11 что-либо из того, что ты, chingachgoog, написал в этой теме smile.gif.
chingachgoog
Цитата(MustLive @ 18.06.2009 - 00:50) *
Т.е. люди страдают различными геморроями, для того чтобы пропатчить новые "возможности" флеша, исключительно из-за маразма Адоба.


Я бы ЭТО не назвал маразмом. Это всего лишь новые особенности (ПО СРАВНЕНИЮ с AVM1) о которых стыдливо не принято говорить.
Особенности эти проистекают, на мой взгляд из-за архитектуры AVM2. Поэтому надеяться на улучшение/исправление вряд ли приходится.
Адоб взяла курс на увеличение производительности при помощи динамической трансляции кода - отсюда все жесткие ограничения. Однако основные тормоза (прорисовка графики) этим не лечаться. Поэтому мне, например, совсем не очевидно, что это верный путь.

Что бы я назвал маразмом - так. это забрасывание апгрейдов AVM1 - все равно ее будут во все новые ФП впихивать для обратной совместимости еще много лет.
VivaKalman
Может баян, но я не нашел ни одного аргумента со стороны %username%. Скажем, если мы пишем на AS2/1 (для веб), то предполагается, что на браузер пользователя установлен Flash player не ниже 9 версии, в то время как As3 предполагает наличие версии >=9. На вряд ли, у всех рядовых пользователей интернета стоит плаер выше 8 версии, заставлять выкачивать пользователя плагин, только для того, что посетить ваш ресурс - по меньшей мере не разумно (да я думаю он откажется и свалит в другое место,  я бы так и сделал).
white-shadow
Тоже специально зарегался:

18) Жесткий override
19) override возможен только у методов, но не у переменных (свойств)
20) Убогий super
во первых переменная и свойство это ни одно и тоже не путайте их
во воторых если вы хотите изменить описание метода то возможно это уже другой метод (или вы не правильно выбрали описание в базовом классе) потомучто то очем говорите вы - не ооп.
в третьих про супер - есть конструкция as :
Код
var obj:Object = getMyCustomObject();
var customObj:MyClass = obj as MyClass;

21)
полиморфизм (см википедию)
Полиморфизм реализуется с помощью наследования классов. Класс-потомок наследует сигнатуры методов класса-родителя, но реализация этих методов может быть другой, соответствующей специфике класса-потомка.

as3 это не ява скрипт - это полноценный ООП!!!!

"Например, такое в AS3 в принципе НЕВОЗМОЖНО:" - кто вам это сказал? просто делаетс базовый класс a radial degree его потомки и все!
23)
а если 100 кадров и на 45 функция переопределяется а на 53 используется как все это разбирать?
chingachgoog
Цитата(white-shadow @ 18.06.2009 - 19:56) *
во первых переменная и свойство это ни одно и тоже не путайте их


А никто их и не путает. smile.gif
Это сказано в контексте override по сравнению с AS1, где вообще никаких проблем с именованием переменных (в т.ч. свойств) нет.

Цитата(white-shadow @ 18.06.2009 - 19:56) *
во воторых если вы хотите изменить описание метода то возможно это уже другой метод


Возможно хотеть что угодно. Но то что в AS1 было сверхгибко, в AS3 загнано в строгие тесные рамки. Собственно об этом п.18
С чем вы не согласны?

Цитата(white-shadow @ 18.06.2009 - 19:56) *
то очем говорите вы - не ооп.


ООП гораздо шире ЧАСТНОГО случая ООП, как ООП на классах.
ООП - это всего лишь три кита: наследование, инкапсуляция и полиморфизм. Все. Больше ничего для ООП не требуется (как не требуется, о ужас, ключевые слова типа "class", "private", "override" и т.д.) Именно потому, что все эти три кита легко достижимы на AS1 - AS1 - язык ООП.

Цитата(white-shadow @ 18.06.2009 - 19:56) *
в третьих про супер - есть конструкция as :
Код
var obj:Object = getMyCustomObject();
var customObj:MyClass = obj as MyClass;


При чем тут приведение типов через as и супер?

Цитата(white-shadow @ 18.06.2009 - 19:56) *
21)
полиморфизм (см википедию)


Мне больше нравиться про полиморфизм у Бадда.
http://grizlyk1.narod.ru/badd/14.htm

Цитата(white-shadow @ 18.06.2009 - 19:56) *
Полиморфизм реализуется с помощью наследования классов. Класс-потомок наследует сигнатуры методов класса-родителя, но реализация этих методов может быть другой, соответствующей специфике класса-потомка.


Я писал пр очередной перл Мука:

Колин Мук.
Action Script 3.0 для Flash
Подробное руководство.
Глава 6. Наследование.
Полиморфизм и динамическое связывание.

Цитата
Полиморфизм - это возможность, присущая всем настоящим объектно-оринтированным языкам программирования, которая заключается в том, что экземпляр подкласса может быть использован везде, где допустимо применение экземпляра его суперкласса.
Само по себе слово "полиморфизм" буквально обозначает "множество форм" - любой объект можно рассматривать как экземпляр собственного класса или как экземпляр любого из его суперклассов.


Поэтому в п.20 я немного поглумился над Муком, как он в AS3 собирается ЭКЗЕМПЛЯР подкласса использовать ВМЕСТО (полноценно) ЭКЗЕМПЛЯРА суперкласса, если мы перепишем в подклассе метод суперкласса? В AS1 это легко можно, а в AS3 - нет (см. выше)

Но вы правы. Полиморфизм - это В ТОМ ЧИСЛЕ И ТО, о чем вы написали (см. ссылку на Бадда). Просто он не только ограничен этими рамками. Полиморфизм - это вообще более архитектура логики, он возможен даже в языках, которые не являются языками ООП.

Цитата(white-shadow @ 18.06.2009 - 19:56) *
as3 это не ява скрипт - это полноценный ООП!!!!


JS, так же как и AS1, так же как и AS3 - языки полноценного ООП. Но JS и AS1 будучи прототипными, более гибкие, чем AS3.

Цитата(white-shadow @ 18.06.2009 - 19:56) *
"Например, такое в AS3 в принципе НЕВОЗМОЖНО:" - кто вам это сказал? просто делаетс базовый класс a radial degree его потомки и все!


Вы видимо не поняли код AS1. smile.gif
Попробуйте написать то же, но на AS3. А потом уже говорите, что это "просто".

Цитата(white-shadow @ 18.06.2009 - 19:56) *
23)
а если 100 кадров и на 45 функция переопределяется а на 53 используется как все это разбирать?


В смысле кому разбирать?
Я просто написал об очередных граблях с AS3. Грабли есть? Есть. И надо понимать механизм граблей.
Maxim I
Я вот люблю алкоголь попивать, даже очень, покуриваю иногда. Но топикстартер употребляет нечто невероятно мощное, штырит его просто ураган.

ps как и остальные добрые самаритяне, специально зарегился, дабы отметить сей примечательный факт

pps с топистартером на одном проекте работать бы не смог
chingachgoog
Жаль, что вместо разбора пунктов по существу (или добавления своих), начинается разбор личностей. Впрочем в сети это обычное явление. sad.gif
Maxim I
Разбирать то нечего, тебе уже все объяснили. Я сейчас нашел баг в проекте на эйре. Искал часа два, ибо классов где-то под 200, и тьма листенеров. На AS1 я бы искал в такой тьме кода неделю
white-shadow
 для начала я говорю не о ролике с неболшим количеством скриптов, а о полноценных приложениях/сайтах на flash где не 1 человек трудиться.


"Возможно хотеть что угодно. Но то что в AS1 было сверхгибко, в AS3 загнано в строгие тесные рамки. Собственно об этом п.18"

хорошо, есть базовый клас и его метод :
Код
class MySuperClass {
   public function MyMethod(i: Number): String;
}

вы делаете потомка этого класса и переопределяете метод:
Код
class MyClass extend MySuperClass{
   public function MyMethod(i: Number; j: String): String;
}


как его теперь вызывать откуда нибуть где требуется MySuperClass - описания изменились приложение свалится с ошибкой времени выполнения.

Цитата(chingachgoog)
При чем тут приведение типов через as и супер?


вы описали задачу вызвать перезаписанный метод - вообщето обычно наоборот есть MyClass приведенный к базовому и нужно вызвать не метод супер класса а именно переопределенный, тоесть так 

Код
(MySuperClassExsemplyar as MyClass).MyMethod(0)

можно и наоборот
Код
(MyClassExsemplyar as MySuperClass).MyMethod(0)



...

"Поэтому в п.20 я немного поглумился над Муком, как он в AS3 собирается ЭКЗЕМПЛЯР подкласса использовать ВМЕСТО (полноценно) ЭКЗЕМПЛЯРА суперкласса, если мы перепишем в подклассе метод суперкласса? В AS1 это легко можно, а в AS3 - нет (см. выше)"

см. выше.

"Полиморфизм - это вообще более архитектура логики, он возможен даже в языках, которые не являются языками ООП."

я знаю что такое поли и что такое морфо, и раз ООП придумали после процедурного программирования то ваше удивление неуместно, только  выглядит это так (Pascal):
Код
function MyFunc(param1: string): string; overload;
function MyFunc(param1: integer): string; overload;

и архитектуры у логики нет...

"Но JS и AS1 будучи прототипными, более гибкие, чем AS3. "
про тотже яваскрипт написано много толмутов что это скорее зло чем благо.
кстати из примеров с адоба [url http://help.adobe.com/ru_RU/ActionScript/3...18a9b90204-7fa3]

Код
Object.prototype.toString = function()
{
    // statements
};


Вы этого хотели в п. 20?


"В смысле кому разбирать?"
вдруг (не дай бог конечно) комуто придется разбирать и дорабатывать код написаный на тамлайне да еще таким способом, или сам автор будет вынужден доработать СВОЙЖЕ код через пол года.

"Я просто написал об очередных граблях с AS3. Грабли есть? Есть. И надо понимать механизм граблей."

для меня это не грабли а вполне нормальное явление присущее не только AS но и многим другим языкам программирования и помоему не только для меня.

ЗЫ. наткнулся на эту тему когда искал документации по ас3 поэтому и решил поспорить, думаю многие желающие изучать актион скрипт будут введеы в заблуждения.
ЗЫЗЫ. гдето на 1 страницы вы писали про Void и void. void - видимо введено для совместимости и привычности (в томже с с++ именно так)
ЗЫЗЫЗЫ многи писали по существу и лично Вас никто не знает, так что причем тут личности?


white-shadow
 и вообще полиформизм не означает что хочу то и творю даже для прототипов, нельзя перечеркивать инкапсуляцию - вам впринцне не нужен базовый класс у вас есть его потомок и экземпляр потомка, а базывай класс может быть вообще абстрактным...

и вы людей обвиняеете в неконкретике - слово гибко тоже не очень конкретно хотя оно идет через приложение...

и тут действительно уместно сравнение с явой и яваскрипт = as3 и as1-2.
chingachgoog
Цитата(white-shadow @ 19.06.2009 - 15:38) *
для начала я говорю не о ролике с неболшим количеством скриптов, а о полноценных приложениях/сайтах на flash где не 1 человек трудиться.


Тут никакого секрета нет. Если речь о многотысячестрочном коде, над которым работают более трех программистов - то работа с классами и даже с интерфейсами будет идти быстрее. Но есть полноценные приложения где кода где-то 2-3 килостроки. Где работает 1-2-3 программиста. Там быстрее и удобнее AS1.

Цитата(white-shadow @ 19.06.2009 - 15:38) *
хорошо, есть базовый клас и его метод :
Код
class MySuperClass {
   public function MyMethod(i: Number): String;
}

вы делаете потомка этого класса и переопределяете метод:
Код
class MyClass extend MySuperClass{
   public function MyMethod(i: Number; j: String): String;
}


как его теперь вызывать откуда нибуть где требуется MySuperClass - описания изменились приложение свалится с ошибкой времени выполнения.


Вы меня спрашиваете? Это адоб надо спросить, зачем они так сделали. (наверное данная архитектура AVM2 по-другому просто не позволяет)
В AS1 это делается легко и безо всяких ошибок - AVM1 последовательно идет по области видимости цепочек прототипов и найдя искомую переменную (в данном случае название метода) более ничего не ищет. О чем я и говорил в пп. 18, 24 Ничего прятать в приват и оверрайдить не нужно.

Цитата(white-shadow @ 19.06.2009 - 15:38) *
вы описали задачу вызвать перезаписанный метод - вообщето обычно наоборот


Обычно да. Но Мук утверждает про наоборот. И я с ним согласен - это круто. Вот беда - Мук забыл рассказать, как это делать на AS3.

Цитата(white-shadow @ 19.06.2009 - 15:38) *
есть MyClass приведенный к базовому и нужно вызвать не метод супер класса а именно переопределенный, тоесть так 

Код
(MySuperClassExsemplyar as MyClass).MyMethod(0)

можно и наоборот
Код
(MyClassExsemplyar as MySuperClass).MyMethod(0)

...


Это привод типизации. Как это поможет вам вызвать метод суперкласса у ЭКЗЕМПЛЯРА подкласса, у которого этот метод был переписан?
Вот вам простые классы:
Код
package {    
    public class A {
        // Суперкласс
        public function use1(){
            trace("суперкласс")
        }
    }            
}

Код
package {    
    public class AB extends A {
        // подкласс
        public override function use1(){
            trace("Подкласс")
        }
    }            
}


Создайте пожалуйста экземпляр подкласса AB и сделайте так, чтобы при вызове метода use1 писалось "суперкласс".
На AS1 такая задача решается на раз.

Цитата(white-shadow @ 19.06.2009 - 15:38) *
Код
Object.prototype.toString = function()
{
    // statements
};


Вы этого хотели в п. 20?


Я хотел аналога
Код
экземпляр.__proto__.__proto__.метод()

для AS3

Цитата(white-shadow @ 19.06.2009 - 15:38) *
"В смысле кому разбирать?"
вдруг (не дай бог конечно) комуто придется разбирать и дорабатывать код написаный на тамлайне да еще таким способом, или сам автор будет вынужден доработать СВОЙЖЕ код через пол года.


Вам удобно рыться по десяткам отдельных .as файлов, где зачастую вместо одной нужной строчки надо писать три (п.24) в отдельном файле.
Кому-то удобно писать код на таймлайне.
Для каждого конкретного случая что-то будет более оптимальным, а что-то менее.

Цитата(white-shadow @ 19.06.2009 - 15:38) *
"Я просто написал об очередных граблях с AS3. Грабли есть? Есть. И надо понимать механизм граблей."

для меня это не грабли а вполне нормальное явление присущее не только AS но и многим другим языкам программирования и помоему не только для меня.


Я за вас рад, особенно если вы понимаете МЕХАНИЗМ граблей, а не просто тупо следуете правилам, знакомым с других языков.
Но после неприхотливого AS1 такие огричения AS3 будут восприниматься именно как грабли. И мне кажется важно показать именно механизм граблей.
chingachgoog
Цитата(Maxim I @ 19.06.2009 - 15:20) *
Я сейчас нашел баг в проекте на эйре. Искал часа два, ибо классов где-то под 200, и тьма листенеров. На AS1 я бы искал в такой тьме кода неделю


Далеко не факт. Кода на AS1 было бы раза в два меньше...
AS1 позволяет писать централизованный код с разбивкой при необходимости на .as файлы.

Цитата(white-shadow @ 19.06.2009 - 15:47) *
и вообще полиформизм не означает что хочу то и творю даже для прототипов, нельзя перечеркивать инкапсуляцию - вам впринцне не нужен базовый класс у вас есть его потомок и экземпляр потомка, а базывай класс может быть вообще абстрактным...


Вот беда - в AS абстрактные классы можно только эмулировать. А при чем тут перечеркивание инкапсуляции я не понял - кто перечеркивает? Где перечеркивает?
Полиморфизм в AS1 более мощный и гибкий, чем в AS3. С этим надо смириться.
Maxim I
 вообще-то если я перегрузил метод в классе-потомке, это означает только одно - МЕТОД РОДИТЕЛЯ МНЕ АБСОЛЮТНО НЕ НУЖЕН, именно поэтому я его и перегрузил. я в страшном сне только представлю что какой-нибудь идиот вздумает вызвать не то, что надо. только не надо фантазий "а что если мне понадобиться". за такое отрывают руки

а про меньше строк кода на AS1 даже не смешно. с твоими мыслями рабочий код хотя бы строк тысяч в 10 будет ужасен и имхо никогда не заработает
Maxim I
В последний раз, когда пришлось вдруг игру писать под AS1/AS2 я рвал на себе волосы, и проклинал все на свете. Чувак, как я счастлив что это позади и с АS1 мне больше не по пути. Подумай об этом на досуге, хотя если ты мазохист, ничего не имею против. Засим откланиваюсь, а то так работа встанет на болтовню
chingachgoog
Как предсказуем оказался Maxim I...
Сленг а-ля "чувак", много эмоций и ничего из конкретики...
Надеюсь на код от white-shadow.
Maxim I
Обращаюсь применительно к Вашему юному возрасту, может так реальнее достучаться. Пока никому это не удалось.

Код
public class Player {

public function Player(){
something();
}

protected function doThis():void{
...
}

}

public class MyPlayer extends Player {

override protected function doThis(){
super.doThis();
.....
}
}


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

тебе уже все разжевали, AS3 сделали донельзя удобным и читаемым, тебе уже про стрикт вроде писали, это спасает нервы, уж поверь
Русская версия IP.Board © 2001-2016 IPS, Inc.