logoAction Script 3


Как теперь работать с клипами ?

Posted in AS2 to AS3 для чайников by miramax on the March 18th, 2007
Mestinon For Sale Septilin No Prescription Buy Abana No Prescription Buy Online Avodart Buy Himcolin Online Hytrin For Sale Levitra No Prescription Buy Proscar No Prescription Buy Online Lopid Buy Zebeta Online Azulfidine For Sale Karela No Prescription Buy Clomid No Prescription Buy Online Loxitane Buy Actoplus Met Online Capoten For Sale Celebrex No Prescription Buy Retin-A No Prescription Buy Online Prednisone Buy Levitra Online Prednisone For Sale Tricor No Prescription Buy Tramadol No Prescription Buy Online Lamisil Buy Inderal Online

Что-то давно я ничего не писал , блог зафлудили спамеры, тем не менее посещаемость растёт. Последнее обстоятельство заставило меня пристыдиться и написать что-нибудь.

Разницы между AS1 и AS2 невелика, некоторые фичи API плеера (например битмап фильтры и ExternalInterface) и эмуляция ООП среды на стадии компилляции. Это именно эмуляция, компиллятор собирает из исходников AS2 код AS1. Посмотрите на параметры публикации, выберите Flash Player 6 и убедитесь что среда предалагает публикацию на двух языках AS1 и AS2.

Многие флешеры говорят что они "кодят на AS2", но большинство из них не понимают что такое ООП. Они имеют какие-то представления об этом, но пишут программы приемущественно в кадрах клипов и считают "классы" лишним наворотом большого смысла в котором видят. ООП идеология - ключевой момент, отличающий AS1 от AS2.
Если пишите программы приемущественно в кадрах, значит кодите на AS1.

Если AS1 — ваш первый язык программирования. То перейти на ActionScript 3 вам будет сложнее. Т.К. в вашем мозге (как и ранее в моём) есть вредные извилины абстрактной модели MovieClip'ов.
Если вы работали на ActionScript 2 то всё немного проще, из-за принципов ООП, которым можно научиться в ActionScript 2.
Всех флешеров AS1, смутит новая модель работы с клипами.

Раньше приаттачить клип из библиотеки можно было так:

1. cоздали новую копию символа linkageId
2. создали новую переменную clipName в клипе clip.
Процесс довольно не привычный для программиста. Двумя строковыми литералами мы создаём переменную непонятного типа в объекте clip.

В Actions Script 3 логика больше соответсвует стандартам.
Что бы создать какой-то графический элемент и разместить его на сцене нужно:

1. Создать новый сомвол в библиотеке и нарисовать что-то в этом символе.
2. Ассоциировать созданный символ с классом:
Просто щёлкните правой кнопкой на символе в билиотеке, выберите Linkage. В открывшемся окне поставьте галочку Export for ActionScript.
В подсветившемся поле "Class" введите название класса.
3. Создать инстанцию класса и приаттачить куда нужно методом addChild().

Допустим вы создали в библиотеке символ и ассоциировали его с классом Square.

  • 1 — объявляем пакет.
  • 3 — импортируем класс Sprite из базового пакета flash.display.
  • 4 — объявляем новый класс Board наследующий Sprite.
  • 8-9 — объявляем переменную типа Square и записываем в неё ссылку на только что созданный объект типа Square.

В строке 9 "аттачим" "клип" aSquare к инстации Document Class, которая служит "рутом".
Обратите внимание ,что для вызова конструктора Square() - не нужно ничего импортировать ( как это нужно было для создания Board наследника Sprite) потому, что все классы созданные в билиотеке являются Top Level и общедоступны для всего приложения. Так же в любом месте программы нам не нужно импортировать класс Board, так как он находится в "верхнем" TopLevel пакете.

Усложняем пример, создаём в библиотеке новый символ, например кружок поменьше квадратика, и ассоциируем его с классом Round.
Создём в одном фолдере вместе с .fla файлом, файл Board.as:

  • 4 — импортируем функцию setTimeout из пакета flash.utils. В пакете можно объявлять не только классы но и функции, константы и т.д. Подробнее эта тема обсуждалась здесь.
  • 8-9 — объявляем пустые ссылки на будущие экземпляры классов Square и Round.
  • 12-13 — создаём объекты aRound и aSquare.
  • 14-15 — у только что созданных объектов нет родителей, и на сцене они не отображены.
  • 16-17 — функция setTimeout позволяет вызвать другую функцию через определённый промежуток времени. Вызоваем функцию addToBoard через одну секунду, а функцию addToSquare через две с половиной секунды.
  • 21 — задаём квадрату координаты 100, 100. Круг остаётся на месте (0,0).
  • 22-23 — строки - добавляем квадрат и круг на сцену. После этого они появятся на сцене. Круг в начале координат, а квадрат в точке 100, 100.
  • 24-25 — строки - родителем обоих объектов стал объект Board.
  • Ещё через 1,5 секунды будет вызвана функция addToSquare:

  • 29 — удаляем со сцены (Board) круг;
  • 30 — смотрим что у круга нет родителя;
  • 31 — аттачим круг в квадрат, вызывая метод addChild в объекте aSquare. Теперь круг сохранит свои координаты 0,0 внутри квадрата.
  • 32-33 — смотрим на родителей клипов aSquare и aRound.

Важный момент: мы отказались и полностью игнорируем имёна клипов. Нет необходимости отслеживать путь к объекту и юзать извращения targetPath и eval, стиль требует передавать ссылки на объекты. Например в объекте aSquare создать поле round ссылающееся на aRound.
Вообще-то если вы настоящиий AS2 программист , вы уже должны так делать =)

В AS1/2 конструктор мувиклипов приватный, это значит что вызвать его мы можем только из другого клипа. Новый клип создаётся и сразу присоединяется к родителю на указанный уровень.
Таким образом в AS1/2 мы НЕ можем создать клип без родителя. И не можем поменять родителя у уже созданного клипа.

Итог:
В AS3 "клипы" можно создавать где угодно, аттачить куда угодно и когда угодно.
Конструкции типа this['aSquare']['aRound'].targetPath() и eval('aSquare.aRound') уходят в прошлое, юзаем ссылки.

3 Responses to 'Как теперь работать с клипами ?'

Subscribe to comments with RSS or TrackBack to 'Как теперь работать с клипами ?'.

  1. riden said,

    on September 8th, 2007 at 7:20 pm

    “Разницы между AS1 и AS2 невелика, некоторые фичи API плеера (например битмап фильтры и ExternalInterface) и эмуляция ООП среды на стадии компилляции. Это именно эмуляция, компиллятор собирает из исходников AS2 код AS1″.

    Эмуляция ООП?? - странное утверждение. Понятно, что AS2 - надстройка над AS1. Но скажи, по твоему AS1 не объектноориентированный язык?

    P.S.: формальный синтаксис классов.

  2. Yury said,

    on September 11th, 2007 at 3:57 am

    Вот вот, считаю что между AS2 и AS3 та же самая соразмерновеликая разница, что и между AS1 и AS2 !

  3. masta Moo said,

    on December 11th, 2007 at 3:35 pm

    а вот еще вопрос такой, с аддчилдом разобрался но один вопрос всетаки меня мучает. вот в АС2 в аттаче присутствовала еще такая вещь как инит объекта , те
    attachMovie(linkage,”name”, 1, {_x:, _y: , _alhpa и тд и тп});

    так вот можно ли addChild мне обратиться к объекту, который я аттачу, или же нужно присваивать каждое свойство приаттаченого объекта послле того как я сделал addChild в АС3?

Leave a Reply

You must be logged in to post a comment.