ActionScript как язык для разработки JS приложений c jQuery и дебагером
Интересен взгляд не только со стороны флэшеров. Очень интересен взгляд JS разработчиков.
Нужен ли JS разработчикам OOP язык? Нужен ли языковой сахар? Интересно ли им развиваться в этом направлении?
Появление coffeecript, lesscss и dart показывают тенденцию в которой мы вполне вписываемся.
Но может быть это все не нужно и мы просто теряем время? Что думаете?
В следующей версии будет поддержка jQuery-плаганов, d3.js и более развитый дебагер. Будут работать все языковые расширения RASE в среде исполнения JS — generics, collections, traits, events flow и др.
Скачать бету Realaxy ActionScript Editor 1.1 можно тут.
Программирование в Macromedia Flash
Прошлая статья была посвящена анимации. Мы создавали анимацию на основе motion tweening, shape tweening и просто составляли движение из отдельных кадров. Думаю, пора перейти к более сложной теме, рассмотрению инструмента, который создает основу для большинства качественных Flash-фильмов (Flash movies).
Этот инструмент — ActionScript — событийно-управляемый язык, встроенный во Flash. Последняя версия ActionScript, (которая присутствует во Flash 5), существенно отличается от ActionScript, который был в 4-м Flash. Если в прошлой версии, это был ограниченный набор команд, позволяющий осуществлять лишь основные действия, и вводимый с помощью не очень удобного интерфейса, то новый ActionScript — это мощный язык, с увеличенным набором команд, поддержкой классов, наследования (!), и гораздо более удобным интерфейсом.
ActionScript делает ваши страницы интерактивными. Вы можете реагировать на события с мышки или с клавиатуры, можете выполнить какие-либо действия при проигрывании определенного кадра.
Для того, чтобы овладеть ActionScript в полной мере, желательно уже иметь опыт программирования (предпочтительно на С++, JavaScript, etc.). Однако, одним из достоинств языка Flash, является то, что вам не нужно быть профессионалом во Flash, или полностью знать ActionScript, чтобы писать на нем качественный код. Вы можете использовать те возможности языка, которые сочтете необходимыми для своей работы.
Так как эта статья посвящена основам языка, в ней мы рассмотрим:
- Панель действий (Actions panel), на которой происходит практически все общение с ActionScript.
- Кнопки — как их заставлять работать, как нам требуется.
- Пути — как обращаться к нужным объектам?
- Основные действия с Flash-мультиками (movie clips) — мы будем управлять процессом проигрывания фильма, как нам будет угодно.
- Отладку в ActionScript — окошки Output и Debugger.
Цель этой статьи, дать вам почувствовать ActionScript, показать, что этот язык может служить, как для создания весьма внушительных программ, так и для выполнения элементарных действий, которые сделают вашу страницу гораздо привлекательней.
Термины
Прежде чем мы перейдем к конкретным действиям, несколько терминов из области ActionScript:
- Действия (Actions) — это инструкции, которые говорят Flash-мультику что делать. От них произошло название языка — ActionScript (дословно — сценарий действий). Давайте договоримся, что в рамках этой статьи, мы будем использовать термин «инструкция», дабы не путаться с настоящими действиями, которые будем производить.
- События (Events) — это действия, которые происходят, когда проигрывается мультик. События, например, могут происходить, когда заканчивается загрузка какого-то кадра, когда мы достигаем какого-то кадра, когда пользователь нажимает клавишу на клавиатуре или курсор мышки оказывается над нашим объектом.
- Выражения (Expressions) — это любая часть инструкции, которая порождает значение. Следующие примеры являются выражениями: 2 + 2, 2 * 2, a + b, 2*pi*r, (15 + k) * random(10).
- Функции (Functions) — это блок кода, который можно многократно использовать. Функции можно передавать значения и получать от нее возвращаемый результат. Например, number = get_color(15, 24). 15 и 24 являются аргументами (или параметрами) функции get_color, возвращаемое значение которой записывается в переменную number.
- Классы (Classes) — это типы объектов. Например, класс дерева — растение. Во Flash есть некоторое количество предопределенных классов (очень похожих на классы JavaScript). Вы можете создавать свои классы, или модифицировать существующие.
- Экземпляры (Instances) — это буквально экземпляры определенных классов. Например, экземпляром растения могут являться дерево, куст или цветок. Экземпляр — это уже конкретный реальный объект. Если класс — это определение объекта (экземпляра), то экземпляр — это уже конкретное воплощение, это класс в действии. Каждому экземпляру можно присвоить имя, чтобы через него обращаться к функциям или переменным объекта.
- Обработчики (Handlers) — это специальные инструкции, которые обрабатывают события. Например onClipEvent — обработчик действий, связанных с конкретным символом (см. Macromedia Flash ч. 2).
- Операторы (Operators) — это элементы языка, которые вычисляют значения, исходя из одного или более аргументов. Например, оператор сложения (+) возвращает сумму двух значений, стоящих слева и справа от него.
- Переменные (Variables) — это идентификаторы, которые могут хранить значения. Например, a = 5; или name = «Michael».
Эти термины мы будем использовать при обсуждении ActionScript. Итак…
Панель действий (Actions Panel)
Панель действий служит для отображения и ввода ActionScript программ (рис. 1). Существует два режима работы с панелью — нормальный (для «чайников») и экспертный. В экспертном режиме список команд — это простое поле для ввода текста. В нормальном же режиме, мы не можем напрямую редактировать команды. Для этого используется панель параметров.
Добавить инструкцию можно, нажав на кнопку «+» (см. рис. 1) или выбрав соответствующую инструкцию в списке элементов языка. Кроме того, для всех действий во Flash имеются последовательности клавиш, с помощью которых это можно сделать гораздо быстрее. Они приведены справа от каждого действия в меню кнопки «+». Например, чтобы добавить функцию stop(), нужно нажать Esc+st (последовательно: Esc, затем «s», затем «t»).
Удалить инструкцию можно, выбрав ее, и нажав кнопку «-» (или просто клавишу Delete).
Я рекомендую вам не начинать сразу же пользоваться экспертным режимом, если у вас нету опыта программирования на Java-подобных языках (С++, Java, JavaScript). У нормального режима есть большое достоинство, делающее его незаменимым для новичков — в нем есть гораздо меньше шансов ошибиться с синтаксисом языка. Новичкам это поможет быстрее понять тонкости ActionScript.
Рис. 1 — Панель действий
В панели действий отображаются действия объекта, либо кадра, выбранного в данный момент.
Кнопки
Первое, что хочется, когда начинаешь изучать интерактивность Flash — сделать что-нибудь, что бы откликалось на действия пользователя, «оживить» ваше творение, добавить обратную связь. Самый простой способ сделать это — кнопки. Поэтому с них-то мы и начнем.
Как вы знаете, во Flash существует специальный тип символа для создания кнопок — Button (см. Macromedia Flash ч. 2). Будем считать, что вы уже научились создавать кнопки, теперь научимся отслеживать нажатия на эти кнопки.
Кнопки в Macromedia Flash обладают обширным списком событий, на которые мы можем реагировать:
- press — клавиша мышки нажата, когда курсор находится в пределах кнопки;
- release — клавиша мышки отжата, когда курсор находится в пределах кнопки;
- releaseOutside — клавиша мышки отжата, когда курсор находится вне пределов кнопки;
- rollOver — курсор мыши входит в пределы кнопки;
- rollOut — курсор выходит за пределы кнопки;
- dragOver — курсор входит в пределы кнопки, при этом была нажата кнопка, и нажата клавиша мыши;
- dragOut — курсор выходит за пределы кнопки, при этом была нажата кнопка, и нажата клавиша мыши;
- keyPress («клавиша») — была нажата «клавиша». Список клавиш можно посмотреть в справке по Flash (объект Key), или использовать панель параметров для вводу нужной клавиши.
К сожалению, Flash «понимает» только левую клавишу мыши. Правая используется для вызова контекстного меню (щелкните правой клавишей на каком-нибудь Flash мультике). Способов отлавливать во Flash среднюю клавишу или «колесико» (mouse wheel), я пока не встречал, думаю, что их не существует.
Перехватываются эти события с помощью директивы on(). Синтаксис ее таков:
on (событие) < . // Наши действия >
Ниже вы можете сами попробовать вызвать некоторые события:
Очень часто используемый пример — переход по ссылке при нажатии на кнопку:
on (release) < getURL("http://rubs.boom.ru"); >
Чтобы проверить этот сценарий, выделите вашу кнопку, нажмите Ctrl+Alt+A и введите программу.
Вот так просто можно перехватить все события, связанные с кнопкой. Ну а как их использовать — это дело исключительно вашего воображения.
Основные действия с Movie Clips
Огромная доля творчества во Flash приходится на манипуляцию символами. Практически все базовые приемы, все трюки и эффекты невыполнимы без этих действий.
С помощью сценариев на ActionScript вы можете выполнять практически любые действия над символами. Надо только помнить, что выполнить эти действия можно только либо в ответ на действие пользователя, либо при наступлении какого-то кадра на временной шкале.
Итак, что же у нас есть? Я перечислю только основные (на мой взгляд) инструменты. Остальное вы найдете в списке элементов языка или в помощи.
Функции клипов (movie clip), которые можно вызывать:
- play() — начинает или возобновляет воспроизведение клипа;
- stop() — останавливает воспроизведение клипа;
- gotoAndPlay() — переходит на определенный кадр (сцену) и продолжает воспроизведение;
- gotoAndStop() — переходит на определенный кадр (сцену) и останавливает воспроизведение.
Свойства (параметры) клипов, которые можно считывать/изменять:
- _x, _y — координаты клипа (в пикселях);
- _xscale, _yscale — масштаб клипа (в процентах), соответственно по горизонтали и по вертикали;
- _width, _height — ширина и высота клипа (в пикселях);
- _rotation — угол поворота клипа (в градусах);
- _alpha — прозрачность клипа (в процентах);
- _visible — видимость.
Это далеко не все, что можно делать с клипами. Используйте другие параметры, экспериментируйте, творите!
Имена
Для того, чтобы обращаться к клипам, нам потребуется разобраться с понятием имени объекта (instance name) и пути до объекта (target path). Договоримся, что клип (movie clip) и объект для нас — одинаковые вещи.
Имя объекта — это имя конкретного экземпляра символа. Скажем у нас может быть символ — машинка, а экземпляры этого символа будут называться «Машинка1», «Машинка2», «Pickup», «Запорожец»…
Для того чтобы дать имя объекту нужно выделить объект, и в панели Instance (Window->Panels->Instance, Ctrl+I) в графе Name ввести имя объекта (рис. 2). Имена могут состоять только из букв, цифр и символа подчеркивания («_»), причем имя не может начинаться с цифры.
Рис. 2 — Панель Instance
Пути
Путь до объекта — это запись имени объекта с учетом иерархии. Попытаюсь объяснить, что это такое.
Вы знаете, что во Flash объекты можно «вкладывать» друг в друга, составляя, таким образом, иерархию. Так вот, эта вложенность обеспечивает не только удобство в обращении с объектами, она еще и ограничивает видимость имен объектов. Видимость ограничивается своим уровнем. Объект может напрямую (по имени) обращаться только к объектам, входящим в него, стоящим на 1 уровень ниже в иерархии.
Для того чтобы обратиться к объекту другого уровня, нужно знать путь до него. Причем путь может указываться как абсолютно (с самого верхнего уровня иерархии), так и относительно (с текущего уровня).
Путь включает в себя объекты, через которые нужно «пройти» по дереву иерархии, чтобы добраться до нужного нам объекта, перечисленные через точку. Кроме того, существует несколько указателей (можно их назвать «виртуальными объектами»), которые часто очень полезны:
this — указатель на «самого себя» (т.е на текущий объект). Бывает нужен, например, когда нужно передать в функцию указатель на объект, из которого эта функция вызывается.
_parent — указатель на «родителя». Указывает на объект стоящий уровнем выше в иерархии.
_root — «корень». Это начало иерархии. Без него не обойтись при указании абсолютного пути.
Путь выглядит так:
leaf.play(); — у подобъекта leaf (лист) вызывается функция play();
_parent.tree.leaf.stop(); — подразумевается, что на одном уровне имеется объект tree, у которого есть объект leaf, у которого и вызывается функция stop();
_root.banner._visible = false; — сделать клип banner, находящийся на 1-м уровне, невидимым.
Рис. 3 — Иерархия клипов
Для иллюстрации возьмем иерархию из 5-ти объектов (рис. 3). Объекты 1-4 находятся на 1-м слое, объект 5 — на 2-м слое. Объект 2 вложен в объект 1, а объект 3 вложен в объект 2. Объекты на рисунке визуально вложены друг в друга, но это ни в коем случае не означает, что так должно быть и «в жизни». Здесь они так сгруппированы для наглядности. Так как имя объекта не может начинаться с цифры, пусть объекты у нас называются obj1-obj5.
Теперь займемся путями. Для начала посмотрим, какие объекты могут обращаться друг к другу по имени. obj1 может обращаться к obj2, а obj2 — к obj3, но при этом obj1 не может обратиться к obj3 напрямую, т.к. тот содержится не в obj1, а в obj2.
Скажем первому объекту нужно, чтобы объект 3 начал заново воспроизводиться с 1-го кадра. Вот как это делается:
obj2.obj3.gotoAndPlay(1);
Чтобы 4-му объекту сделать 1-й объект (заметьте со всеми подобъектами!) полупрозрачным, ему нужно в своем сценарии написать следующее:
_parent.obj1._alpha = 50;
_root.obj1._alpha = 50;
Т.к. obj4 у нас находится на первом уровне иерархии, то для него _root и _parent — одно и то же.
Теперь для объекта 3 напишем скрипт, который сделает объект 5 невидимым при нажатии клавиши мыши. В сценарии для объекта 3 пишем:
onClipEvent (mouseDown)
В этом фрагменте мы использовали абсолютный путь. Если бы мы использовали относительный, это выглядело бы как:
_parent._parent._parent.obj5._visible = false;
Надеюсь, я прояснил момент с путями.
Приведенные выше примеры показали не только как выглядят пути, но и как вызываются функции и присваиваются значения свойствам.
Вы можете попробовать использовать обработчик onClipEvent, задавая различные условия и выполняя различные действия с объектами при этом.
Одними из самых важных являются функции управления ходом воспроизведения клипа (play(), stop(), gotoAndPlay(), gotoAndStop()). Функции play() и stop() вызываются без параметров, в то время как в goto нужно указывать кадр, и, возможно, сцену.
Отладка в ActionScript
Последнее, что мы рассматриваем в этой статье: окна Output (вывод) и Debugger (отладчик) — инструменты, служащие для отладки сценариев ActionScript.
Окошко Output пришло из Flash 4, где оно было единственным инструментом для отладки. Существует директива trace(), которая выводит сообщения в это окошко. Туда же выводятся сообщения об ошибках.
Использовать trace очень просто:
trace ("280-й кадр");
trace (xpos + k);
В 5-м Flash появился специальный инструмент — окошечко Debugger. Чтобы им пользоваться нужно проверять свои фильмы не как обычно (Test movie, Ctrl+Enter), а с помощью Debug movie (Ctrl+Shift+Enter). Окошко Debugger (рис. 4) можно скрыть/показать с помощью Window->Debugger.
Рис. 4 — Окно Debugger
В одной части окна Debugger находится иерархический список объектов, используемых в фильме. Выбрав объект, можно просматривать его свойства (закладка Properties).
Под закладкой Variables находятся все переменные. Преимущество закладки Variables состоит в том, что вы можете модифицировать значения любых переменных «на лету» и тут же получать отражение этого изменения в фильме.
И, наконец, можно добавить любые переменные в список просмотра (Watch list) и наблюдать за их значениями (закладка Watch).
Debugger позволяет отслеживать практически любые параметры Flash-фильмов. Тем не менее, я считаю, что свое применение есть и у окошка Output и у Debugger-a.
Вот и все на этот раз. Это — последняя статья из цикла. К счастью, сейчас появилось много материалов и руководств по основам Macromedia Flash 5. Продвинутые аспекты Flash постепенно переводятся/сочиняются на русском языке, и появляются на наших сайтах. Последующие материалы по Flash будут посвящены «продвинутым» аспектам Flash. Так же есть идея написания руководств по другим программам, производящим Flash-фильмы (в частности трехмерные).
Удачи вам! У вас есть великолепное средство делать сеть (и не только сеть) красивее! Пользуйтесь им, доставляя удовольствие посетителям ваших творений и самим себе.
Flash – использование ActionScript 3.0

Платформа Adobe Flash является основой для разработки многофункциональных интерактивных веб-приложений, презентаций и пользовательских интерфейсов. Приложение Flash позволяет разработчикам и дизайнерам использовать графику, текст, аудио и видео.
В последние годы самые популярные браузеры пытаются избавиться от использования Flash в пользу возможностей HTML5. Например, в последних версиях Google Chrome плагин Adobe Flash Player остановлен по умолчанию и на сайтах, использующих Flash, необходимо включать его вручную. Многие популярные видео-сервисы, такие как YouTube, также отказались от использования Flash в пользу HTML5. Тем не менее, до сих пор особо популярными остаются игры на flash, где возможности HTML5 пока значительно уступают.
У Flash есть два «лица»: то которое вы видите на экране, и комплексный механизм сценариев, называемый ActionScript, который вы не видите. Являясь языком сценариев, встроенным во Flash, ActionScript позволяет создавать интерактивные решения. Любой ролик, где нужно что-то нажать, перетащить или поставить на паузу, требует использования ActionScript, который укажет Flash, что надо делать. ActionScript является основой всей интерактивности и логики, встроенной во Flash.
В выпуске Flash CS3 был представил ActionScript 3.0 — значительно усовершенствованный язык сценариев. Старые версии ActionScript медленно выполняли большие и сложные сценарии. ActionScript 3.0 изменил это. Он почти в 10 раз быстрее по сравнению с ActionScript 2.0 и обладает намного большей функциональностью.
ActionScript 3.0 принял истинный объектно-ориентированный подход к разработке, который позволяет приложениям Flash конкурировать с решениями, разработанными с помощью Microsoft .NET (Silverlight) или Java. ActionScript 3.0 значительно расширяет все то, что может быть достигнуто за счет увеличения скорости работы в проигрывателях Flash Player 9 и 10. С ActionScript 3.0 и Flash Player 10.1 и более поздних версиях вы можете создавать приложения для большинства настольных компьютеров, устройств и систем. ActionScript 3.0 в настоящее время является языком сценариев по умолчанию во Flash CS5 и последующих версиях.
Из этой статьи вы узнаете, почему ActionScript 3.0 — тот язык программирования, который вы захотите начать использовать, что изменилось по сравнению с более ранними версиями ActionScript, а что осталось таким же и как сделать наши приложения еще мощнее. Единственная проблема, которую вам придется решить — это выбрать, что разрабатывать в первую очередь.

Использование объектно-ориентированного программирования в ActionScript
Объекты являются ключом к пониманию объектно-ориентированного программирования (ООП). В ООП объект является столь же реальным, как и обычный объект в нашем мире. Например, собака или даже компьютер — объекты, которые существуют в реальном мире. Объекты реального мира схожи с объектами компьютерного мира по двум параметрам: у них есть определенное состояние и поведение. Например, состояние собаки можно описать такими свойствами, как ее имя, окрас, порода, и тем, голодна ли она. Поведением собаки будет лай, привлечение внимания и виляние хвостом.
Компьютерные объекты моделируются по образцу объектов реального мира в плане конкретных состояния и поведения. Класс является представлением объекта, который хранит информацию о типе его данных, состоянии и поведении. Класс может включать в себя три типа характеристик: свойства, методы и события. Свойства представляют различные данные, связанные с объектом. Методы означают действия, которые могут быть выполнены с объектом. Событие – это действие системы, приложения или пользователя (например, щелчок кнопкой мыши, который вызывает действие, связанное с объектом).
После создания класса вы можете создавать классы на основе существующего, которые называются подклассами, или расширениями класса. Подкласс наследует все свойства и методы родительского класса, который, в свою очередь, будет называться суперклассом. Например, вы можете создать суперкласс Parent и подкласс Children. Наследование позволяет одному определению класса (подклассу) включать все функции другого определения класса (суперкласса). Вы также можете создавать дополнительные методы и свойства подкласса, а также переопределять методы, унаследованные от суперкласса, что называется полиморфизмом.
Наследование и подклассы очень удобны для больших проектов, где вы можете делиться своей функциональностью и уменьшать количество кода.
Объект поддерживает свое состояние с помощью одной переменной или большего их количества. Переменная – это элемент данных, названный определенным идентификатором. Все, что объект понимает (его состояние) и может сделать (его поведение), выражается через переменные и методы внутри этого объекта.
Объект, представляющий собой движущийся автомобиль, будет иметь переменные, которые отражают его скорость, направление и цвет, как показано на рисунке ниже. Эти переменные известны, как переменные экземпляра, потому что они содержат состояния конкретного объекта, а в объектно-ориентированной терминологии конкретный объект называется экземпляром. Вдобавок к своим переменным у автомобиля будут методы, отвечающие за изменение скорости и включение фар. Эти методы называются методами экземпляра, поскольку они проверяют или изменяют состояние конкретною экземпляра.

Настройка Flash для движка AVM 2.0
— плагин, который установлен в веб-браузере для воспроизведения файлов SWF, является ключом к успеху при создании быстрых приложений. Чтобы скомпилировать, а затем запустить любой код ActionScript в роликах, Flash Player использует инструмент, называемый ActionScript Virtual Machine (виртуальная машина ActionScript) или AVM. Для ActionScript 1.0 и 2.0 Flash Player использует AVM 1.0. Flash Player 9 представил новый AVM версии 2.0, который используется для работы только с SWF-файлами ActionScript 3.0. Освоить его довольно просто.
Используя AVM 2.0. вы можете создавать приложения, которые характеризуются высокой скоростью и сложностью традиционных настольных приложений. Примерами таких приложений являются WorkFlow Lab от Adobe — инструмент, который позволяет разрабатывать составные приложения Workflow и конкурирует непосредственно с инструментом Visio от Microsoft; Adobe Story — инструмент, который позволяет создавать сценарии мультимедийной и видеопродукции, а также Kuler — сложный инструмент управления цветами. Использование данных инструментов дает такую же ответную реакцию, как и традиционные настольные приложения.
Разработка на ActionScript 3.0 решений, которые ориентированы на движок AVM 2.0, гарантирует, что вы значительно оптимизируете свою работу во Flash.
Flash Player 9 поддерживает AVM 1.0 для обратной совместимости с существующими и устаревшим содержимым. Flash Player 7 и 8 поддерживают только AVM 1.0. Однако есть несколько моментов, касающихся совместимости, о которых вы должны знать. SWF-файл не может объединить ActionScript 1.0 или 2.0 с кодом версии 3.0, при этом код может загрузить файл SWF с версиями 1.0 или 2.0, но он не может получить доступ к переменным и функциям файла (за исключением возможности использовать команду loadMovieNum() и передать параметр уровня). Если у вас есть код версий 1.0 или 2.0 и вы хотите использовать код версии 3.0, необходимо привести весь старый код к ActionScript 3.0. Если вы хотите использовать поведения, вам нужно прибегнуть к ActionScript 2.0, так для 3.0 поведения недоступны.
Виртуальные машины и JavaScript
Веб-браузеры используют виртуальные машины для запуска JavaScript, который является «двоюродным братом» ActionScript. Обе технологии построены на международном формате ECMA-262, или ECMAScript, как его часто называют. Такие браузеры, как Google Chrome, Safari, FireFox и Internet Explorer используют виртуальные машины сценариев JavaScript (JavaScript Virtual Machines — JVM) для воспроизведения содержимого.
Многие из компаний, создающих движки для браузеров, дали им яркие названия: V8 для Google Chrome, SquirrelFish для Safari и SpiderMonkey для FireFox. Но победителем в оригинальных названиях конечно можно дать Microsoft – ее творческое вдохновение ограничилось названием своей виртуальной машины JS (для JavaScript).
Конечно AVM 2.0 от Adobe здесь занимает второе место. Есть ли шанс, что Adobe все-таки присвоит AVM 3.0 какое-нибудь яркое имя?)
Использование ActionScript 3.0
По сравнению с предыдущими версиями, ActionScript 3.0 претерпел значительные изменения. Это не означает, что если вы работали с ActionScript 1.0 или 2.0, то вам придется тяжело. Просто освоение новых способов использования кода потребует времени.
Понимание ActionScript 3.0
ActionScript 3.0 является надежной моделью программирования (полностью актуальной в соответствии с последним выпуском стандарта ECMAScript), знакомой разработчикам с базовыми знаниями ООП. Если вы уже использовали в работе другие языки программирования, такие как Java, C++ или C#, то должны быть в курсе, что означает данный термин.
Объектно-ориентированное программирование позволяет разбивать код на объекты, которые могут быть легко использованы повторно. С помощью ООП легче управлять приложением, которое состоит из целой коллекции файлов маленького размера, а не из одного большого файла.
Рассмотрим основные изменения, которые потребуют определенного времени на привыкание к ним:
-
ActionScript находится в файлах класса или на временной шкале.
Кроме того, добавлено использование информации о типе во время выполнения, улучшено использование свойств и классов с изолированными кассами, добавлено использование метода замыкания для обработки событий, включен стандарт ECMAScript для XML, улучшена поддержка регулярных выражений и добавлены примитивные типы (например, int – целочисленный тип).
Работа с ActionScript 3.0
Есть два способа работы с ActionScript. Первый заключается в добавлении ActionScript на временную шкалу. Это знакомо давним разработчикам Flash. Рекомендуется иметь слой на этой временной шкале, посвященный только работе с ActionScript. Adobe советует пометить его как actions. Блокировка данного слоя предотвратит случайное добавление на него фрагментов ролика.
Второй метод заключается во вставке ActionScript в файлы Flash с файлом класса (Class). Файлы класса имеют долгую историю в мире разработки. С их помощью вы можете указать как публичные, так и приватные классы. Ключевое слово Private ограничивает использование атрибута, определенного только в этом классе, а не совместно с другими классами. Это полезно, когда вы разрабатываете инструкции, которые должны быть выполнены в отдельном пространстве в частном порядке.
Другие важные изменения перечислены ниже:
-
Разработка построения решений с моделью событий DOM 3.
Несмотря на все изменения в ActionScript 3.0 по сравнению с 2.0, важно помнить, что есть много функциональных возможностей, одинаковых для обеих версии. Например, вы по-прежнему можете использовать тем же самым образом следующие элементы: переменные, объект Math, выражения if/else, выражения switch, строки, даты, массивы и логические значения.
Следующий код работает как в ActionScript 2.0, так и в версии 3.0:
var str1:String = new String("Привет, "); var str2:String = new String("мир"); trace(str1 + str2);
Как видите, общая структура синтаксиса одинакова в обеих версиях ActionScript. Код завершается фигурной скобкой, имена переменных чувствительны к регистру и не могут начинаться с цифры, объекты классов используются одинаково.
Расширение ActionScript открытыми библиотеками
Основой языка ActionScript 3.0 является то, что он может быть легко расширен. Для этого можно использовать десятки больших отрытых библиотек, расширяющих функциональность Flash. Достойными примерами являются:
-
Box2D Physics Engine;
- C# тест (легкий)
- .NET тест (средний)

Лучший чат для C# программистов
Flash-программирование в Linux
Сейчас достаточно информации о программировании Flash-приложений, инструментах разработки и самой технологии Flash.
Поэтому в данной статье основное внимание будет уделено разработке Flash-приложений в ОС Linux и языку haXe, ибо это именно то, что я выбрал для себя.
У вас может возникнуть вопрос: зачем Flash-программисту нужен Linux? Думаю, по той же причине, по какой он требуется любому разработчику, — это бесплатная ОС и свободно распространяемые инструменты разработки, а также возможность гибко настроить под себя и то и другое, создавая собственные инструменты. Конечно, продукты компании Adobe весьма хороши, но они довольно дороги, однако им есть интересные бесплатные альтернативы.
Средства разработки: выбор есть
Многие Flash-разработчики приняли идеологию Open Source, хотя большая часть из них все же работают в Windows. Тем не менее инструментов для разработки Flash-приложений в Linux существует предостаточно.
Впрочем, прежде чем выбирать подходящие для себя решения, следует обдумать, нужна ли вам интегрированная среда разработки (IDE) или вы будете реализовывать свой набор инструментов на базе какого-либо универсального текстового редактора.
Что лучше: IDE или редактор?

Если для работы необходима IDE, то есть два основных варианта: Flex Builder 3 фирмы Adobe (альфа-версия) и Eclipse с дополнительным модулем FDT. Оба решения платные: хотя сам Eclipse бесплатный, но FDT стоит немалых денег (около 600 евро).
Существует еще более экзотический вариант запуска среды FlashDevelop из-под Wine, но это, пожалуй, лучше оставить фанатам FlashDevelop. Для полноты картины следует назвать и IntellijIDEA — среду разработки для Java, поддерживающую и разработку Flash-приложений. Это также платный продукт, но он имеет лицензию OpenSource для открытых проектов. Думаю, он больше подойдет Java-программисту, решившему освоить Flash-платформу.
Если же вы готовы работать без интегрированной среды, то возможности выбора подходящего решения резко увеличиваются. Например, я строю свою систему на базе редактора vim, дополняя его плагинами и shell-скриптами. Конечно, с тем же успехом можно использовать Emacs или другой редактор, а также любой скриптовый язык. Так, я в качестве языка программирования выбрал haXe, а не ActionScript, поскольку он имеет более гибкий и лаконичный синтаксис и быстрый компилятор, а также различные приятные «фишки», но их обсудим ниже.
Если вы все-таки хотите иметь IDE, но не желаете платить за нее и готовы применять haXe, а не ActionScript, то попробуйте такой вариант: Eclipse плюс встраиваемый модуль EHX. Пока возможности этого модуля не слишком велики, но его авторы работают над ним и обещают в ближайшее время добавить полноценный отладчик.
Также стоит упомянуть проект flash4linux. Это клон Flash IDE, работающий в среде Linux. Впрочем, данный инструмент предназначен для дизайнеров, и пока еще он значительно хуже оригинала.
Как выбрать компилятор?
Выбор удовлетворяющего всем требованиям компилятора — дело, пожалуй, более важное, чем выбор IDE. Ведь по сути именно компилятор определяет возможности используемого языка программирования. Например, язык ActionScript не работает с типизированными массивами, а компилятор mtasc их поддерживает. И если вы пишете код для mtasc, значит, пользуетесь уже другим языком — ActionScript с поддержкой типизированных массивов.
Мне известны лишь два разработчика компиляторов для Flash: компания Adobe и некий француз Николас Каннассье, автор mtasc и haXe.
Компилятор Flash IDE, как и следует из его названия, штатное средство, созданное компанией Adobe. Он компилирует программы, написанные на языке ActionScript версий 1.0, 2.0 и 3.0. Компилятор не существует отдельно от Flash IDE, и, значит, его приходится приобретать вместе с ней, к тому же по достаточно высокой цене. Эффективность этого компилятора очень низкая, работает он крайне медленно. Кроме того, он функционирует только на платформах Windows и Mac OS. Данный компилятор вообще единственный из рассматриваемых, который не работает в Linux.
mxmlc — компилятор, входящий в состав Flex SDK. Компилирует ActionScript 3.0 и MXML. Это решение мультиплатформенное, открытое, бесплатное, довольно эффективное, но все же уступающее mtasc и haXe.
mtasc — свободно распространяемый мультиплатформенный компилятор. Он был основным инструментом серьезных Flash-программистов до появления ActionScript 3.0 и haXe. Сейчас он сдал вахту компилятору haXe, своему прямому потомку. Компилирует только ActionScript 2.0, но делает это так быстро и качественно, что пользоваться каким-то другим даже не хочется.
Поскольку большинство своих проектов я написал именно на второй версии ActionScript, то до сих пор пользуюсь им. Компилятор mtasc собирает проект из более чем 600 классов за 1,5 с. Flash IDE Compiler делает то же самое за 20 с. Как я уже говорил, mtasc поддерживает дополнительные возможности синтаксиса языка. Например, он позволяет писать код в конструкторе класса до вызова суперконструктора, а вот компилятор Flash IDE посчитал бы такое ошибкой.
haXe — потомок mtasc и, значит, еще одно детище Николаса Каннассье. Этот компилятор вырос в самостоятельную платформу разработки веб-приложений, довольно популярную на Западе, но практически неизвестную у нас. Для Flash-разработчика главное то, что данный язык полностью поддерживает API Adobe Flash Player версий 8 и 9 и, следовательно, его можно считать полноценной заменой компилятору mxmlc. Компилятор haXe мультиплатформенный, он распространяется по лицензии OpenSource.
Что нужно знать о haXe?
Как я уже отмечал, мой выбор пал именно на этот компилятор, и потому рассмотрим его возможности более подробно.

Поскольку haXe — самостоятельная платформа, то создание приложений на Flash является лишь одной из ее возможностей. На haXe можно разрабатывать и серверную часть, и настольные приложения. Основная идея haXe состоит в том, чтобы предоставить один язык программирования для разработки всех частей веб-приложения, будь то клиентская программа на Flash, JavaScript-клиент в браузере или серверное приложение. Компилятор haXe может транслировать текст программы, написанной на одном языке, в разные байт-коды и даже в код на другом языке! Код haXe компилируется в swf-файлы версий 8 и 9 Flash-проигрывателя, код на ActionScript 3.0, JavaScript, PHP и Neko-байт-код.
Поистине удивительно, что один и тот же язык программирования способен компилироваться в разные байт-коды и транслироваться в другие языки. Как охарактеризовал это один мой знакомый, «.NET наоборот».
Более полную информацию о данном компиляторе можно почерпнуть на официальном сайте haxe.org, а также на haxe.ru, где отечественные энтузиасты haXe (в том числе и я) делятся опытом.
Функции серверной части реализуются возможностями виртуальной машины Neko, так же как и сам язык Neko, разработанной Николасом Каннассье. Причем Neko может и самостоятельно работать как веб-сервер, и подключаться к Apache в виде модуля.
Конечно, на простом хостинге поддержку Neko не встретишь, поэтому для проекта на haXe понадобится собственный сервер. Чтобы избавить разработчиков от таких сложностей, Николас добавил возможность транслирования haXe в PHP-код. Пока еще эта функция находится в состоянии альфа-версии, но она войдет в haXe версии 2.0.
Что еще может понадобиться разработчику?
Понятно, что swf-файл, проигрываемый во Flash-плеере, – только клиентская часть клиент-серверного приложения. В большинстве случаев при разработке приложений Flash-программисту приходится взаимодействовать с серверными технологиями. В принципе технологии могут использоваться разные, а вот способов взаимодействия с ними можно выделить лишь три:
Взаимодействие с веб-сервером по протоколу HTTP, аналогичное работе веб-браузера. В данном случае задача взаимодействия как раз и возложена на браузер — он посылает запросы серверу по просьбе Flash-модуля и передает обратно ответы сервера. Следовательно, здесь применяются все те же технологии, что и в веб-программировании: PHP, ASP, JSP, Perl, Ruby и даже CGI.
Постоянное соединение по сокету на любом порту и взаимодействие с какой-либо серверной программой-демоном. Здесь больше подойдут Java и Cи/C++. Впрочем, конечно, есть и другие варианты (я для своих проектов сделал небольшой сервер на Ruby).
Соединение по RTMP-протоколу. Хотя это и частный случай предыдущего способа взаимодействия, его следует выделить особо, потому что он применяется для передачи потокового видео и звука. Стало быть, данный способ будет оптимальным для мультимедийных приложений.

Отдельного обсуждения требуют медиасерверы, ведь передача видео является, вероятно, одним из самых перспективных направлений для Flash-приложений.
Медиасервер обеспечивает передачу потокового видео и звука между клиентами (Flash-плеерами). Для передачи обычного видео используется формат flv, а с недавних пор (с выходом Flash Media Server 3 и Flash Player 9.0.115) появился и новый формат H.264 для видео высокой четкости.
В настоящее время Linux-программисты могут воспользоваться любым из следующих решений: Flash Media Server, Red5 или Wowza. Flash Media Server официально поддерживает только коммерческая версия RedHat, но неофициально его можно установить в любом rpm-дистрибутиве. А вот Flash Media Server и Wowza — коммерческие, закрытые продукты.
Flash Media Server — разработка компании Adobe. Замечено, что при замене версии изменяется и название этого продукта. Раньше он именовался как Flash Community Server 1.5, Flash Media Server 2.0, а теперь называется Adobe Flash Media Interactive Server 3. Это самый эффективный, производительный и стабильный сервер, способный поддерживать одновременную работу многих клиентов и много видеопотоков. Однако из-за его высокой цены приходится идти на компромисс — либо ставить Red5 или Wowza, либо пользоваться услугами rtmp-хостинга.
Для разработчиков есть и бесплатная версия, в которой число соединений ограничено десятью. Серверную часть для данного решения можно написать очень просто, использовав язык ServerSide Action Script. Он аналогичен Action Script 1.0, однако обладает некоторыми особенностями. Полагаю, Flash-разработчики легко сумеют его освоить.
Red5 — медиасервер на базе Java, разработанный сообществом OpenSource, а значит, открытый, бесплатный и, как водится, мультиплатформенный. На его базе можно (и нужно) писать на языке Java собственные медиаприложения. Вообще говоря, он представляет собой платформу для таких приложений. В Интернете встречается много хороших отзывов о нем, но из моего личного опыта работы с ним я сделал вывод, что он работает нестабильно, зависает, требует перезагрузок, да и производительность при этом низкая. Не рекомендую его использовать в тех случаях, когда вы предполагаете осуществлять больше 30 одновременных соединений с интенсивной передачей видео.
Wowza — мультиплатформенное решение, разработанное компанией Wowza Media Systems. Оно коммерческое, однако по сравнению с тем, что придется заплатить за Flash Media Server, его цена выглядит приемлемой. Этот продукт основан на базе сервера Red5, но разработчикам удалось довести все до ума, и сервер стал значительно стабильнее и производительнее. В общем, данное решение представляет собой ту самую «золотую середину», которую я рекомендую использовать.
С недавних пор RTMP-протокол также открыт, и значит, любой желающий может написать свой медиасервер, который будет взаимодействовать с Flash-плеером. Конечно, в первых рядах таких желающих окажется и Николас Каннассье. Поскольку качество его разработок очень высокое, то я уверен, что созданный им сервер haXe Video будет точно не хуже, чем Red5. И конечно, серверный код для него пишется на haXe.
По пятам за ним следует Такума Мори, выпустивший недавно медиасервер RubyIZUMI. Думаю, вы уже догадались, на каком языке программирования он написан?
Один из недостатков RTMP-протокола состоит в том, что он не поддерживает шифрование, из-за чего данные по нему передаются в открытом виде. Но эта проблема будет решена с выходом версии 10 Flash-плеера, который (как и Flash Media Server) будет поддерживать новую версию протокола — RTMFP с шифрованием данных.
Что в итоге?
Несмотря на то что флагман Flash-платформы — компания Adobe семимильными шагами движется к доминированию на рынке Rich Internet Applications и технологий передачи видео в Интернете, сообщество OpenSource легко дублирует все Flash-технологии, делая реальным существование Flash-приложений на открытых платформах.