ActionScript — объектно-ориентированный язык программирования, один из диалектов ECMAScript, который добавляет интерактивность, обработку данных и многое другое в содержимое Flash-приложений. ActionScript исполняется виртуальной машиной (ActionScript Virtual Machine), которая является составной частью Flash Player. ActionScript компилируется в байт-код, который включается в SWF-файл.
SWF-файлы исполняются Flash Player'ом. Flash Player существует в виде плагина к веб-браузеру, а также как самостоятельное исполняемое приложение (standalone). Во втором случае возможно создание исполняемых exe-файлов (projector), когда приложение Flash Player объединяется с swf-файлом по аналогии с SFX.
С помощью ActionScript можно создавать интерактивные мультимедиа-приложения, игры, веб-сайты и многое другое.
ActionScript — открытый язык программирования, его спецификация находится в открытом доступе на сайте Adobe[2]. Компилятор (как часть Apache Flex) и открытая виртуальная машина (Tamarin) являются открытым программным обеспечением. В 2020 Adobe передало обновление ActionScript компании HARMAN[3]. В 2022 HARMAN предоставили приветствие вклада [4][5]
История
ActionScript как язык появился с выходом 5-й версии Macromedia Flash, которая стала первой программируемой на ActionScript средой. Первая вышедшая версия языка называлась ActionScript 1.0. 6-я версия Flash (MX) также использовала ActionScript 1.0. В 2004 году компания Macromedia представила новую версию ActionScript 2.0 вместе с выходом Flash 7 (MX 2004), в которой было введено строгое определение типов, а также программирование, основанное на классах. То есть появились новые ключевые слова:
- class (класс),
- interface (интерфейс),
- extends (установка наследования)
- модификаторы доступа: private, public;
- и прочие.
Также Macromedia была выпущена модификация языка Flash Lite для программирования под мобильные телефоны.
ActionScript 1.0 является прототипным языком программирования. То есть он вполне реализует все три принципа объектно-ориентированного программирования.
ActionScript 2.0 является надстройкой над ActionScript 1.0. Проверка типов и работа с иерархией классов осуществляется во время компиляции, которая заканчивается генерацией байткода, аналогичного ActionScript 1.0.
В 2006 году вышел ActionScript 3.0 в среде программирования Adobe Flex, а позже в Adobe Flash 9.
ActionScript 3.0 представляет, по сравнению с ActionScript 2.0, качественное изменение, он использует новую виртуальную машину AVM 2.0 и даёт взамен прежнего формального синтаксиса классов настоящее классовое (class-based) Объектно-ориентированное программирование. ActionScript 3.0 обеспечивает возрастание производительности, по сравнению с ActionScript 1.0/2.0, до 700 раз (это лишь обработка инструкций, не затрагивая графику). ActionScript 3.0 позволяет работать с бинарными данными, с BitMap (что обеспечивает значительный прирост производительности: до 10000 раз). ActionScript 3.0 по скорости приблизился к таким языкам программирования, как Java и C#.
Увеличение производительности основано на динамической трансляции кода (JIT). Такое увеличение производительности возможно лишь для некоторых типов данных и требует особой организации кода[6]. Объём кода, как правило увеличивается в несколько раз[7] (по сравнению с AS1).
Версии плеера |
Нововведения
|
2
|
Появились «действия», в дальнейшем известные как:
- gotoAndStop();
- gotoAndPlay();
- nextFrame();
- prevFrame();
- getURL();
|
3
|
Появление loadMovie();
|
4
|
Первая версия с полной поддержкой скриптовой имплементации.
|
5
|
Появление первой версии ActionScript. Использовалось прототипное программирование на базе ECMAScript и предоставлена полная поддержка процедурного и объектно-ориентированного программирования.
|
6
|
- Добавлена событийная модель
- switch
- Появилась поддержка AMF и RTMP протоколов.
|
7
|
- Появление AS2, базирующигося на ECMAScript 4 с классобазированным программированием.
- Добавлена поддержка CSS для текста.
|
8
|
- Появление новых правил безопасности.
- Добавление фильтра AS1/AS2.
- Появление класса для просмотра Bitmap Data в реальном времени.
|
9
|
- Новый скриптовый движок ECMAScript, ActionScript Virtual Machine AVM2. AVM сохранён для совместимости, добавлена поддержка ActionScript 3 через AVM2.
- Появление расширения E4X для XML.
|
10
|
- 3D-эффекты
- Различные фильтры и эффекты
- Расширенная схема размещения текста
- Улучшено API Рисования
|
10.2
|
- улучшена поддержка p2p, Добавлено шумоподавление.
|
11
|
- Появление низкоуровнего API для работы с графикой, USB-устройствами
- 3D-акселерация
|
Поддержка версий ActionScript:
|
Не поддерживается
|
AS1
|
AS1, AS2
|
AS1, AS2, AS3
|
Синтаксис
Синтаксис ActionScript основан на спецификации ECMAScript.
ActionScript 2.0
Данный код создаёт новое текстовое поле на глубине (depth) 0, в точке (0, 0) и размером 100 на 100 пикселей. Параметр text
равен строчке «Hello, world». Код должен быть записан в окне action — frame
createTextField("greet", 0, 0, 0, 100, 100);
greet.text = "Hello world!";
Пример класса, написанного на AS2. Код должен сохраняться в отдельном .as-файле и располагаться в одной папке с .fla-исходником проекта.
class com.example.Greeter extends MovieClip
{
public function Greeter()
{
}
public function onLoad() :Void
{
var txtHello:TextField = this.createTextField("txtHello", 0, 0, 0, 100, 100);
txtHello.text = "Hello Ako!";
}
}
ActionScript 3.0
В исходном коде, компилируемом Adobe Flex SDK (AS 3.0):
package {
import flash.display.Sprite;
import flash.text.TextField;
public class HelloWorld extends Sprite {
public function HelloWorld() {
var txtHello:TextField = new TextField();
txtHello.text = "Hello world!";
this.addChild(txtHello);
}
}
MXML
Код, написанный на MXML (расширение XML):
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns="*" layout="vertical"
creationComplete="initApp()">
<mx:Script>
<![CDATA[
public function initApp():void
{
// Prints our "Hello, world!" message into "mainTxt".
mainTxt.text = Greeter.sayHello();
}
]]>
</mx:Script>
<mx:Label id="title" fontSize="24" fontStyle="bold" text='"Hello, world!" Example'/>
<mx:TextArea id="mainTxt" width="250"/>
</mx:Application>
Отладчик
Пример работы отладчика. Выводит на экран output любые данные, которые возможно преобразовать в String (AS2 и далее):
Структура
ActionScript 2
Элементарные типы данных
Тип
|
Описание
|
String
|
Строчка, массив символов, например: «Hello, World»
|
Number
|
Любое числовое значение, например: 0, 0.5, 1150
|
Boolean
|
Логическая величина, может принимать значения «true» или «false».
|
Object
|
Объект. Примером объекта являются классы, методы, функции, параметры и т. д.
|
Сложные типы данных
Тип
|
Описание
|
MovieClip
|
Графический объект, содержащий кадры.
|
TextField
|
Динамическое или вводимое текстовое поле.
|
Button
|
Кнопка. Является по сути Movie Clip с предопределенным поведением. Состоит из 4 кадров: Up, Over, Down и Hit.
|
Date
|
Объект, содержащий сведения о дате/времени.
|
Array
|
Массив данных.
|
XML
|
XML-объект
|
XMLNode
|
XML-node
|
LoadVars
|
Служит для отправки и приёма переменных при помощи HTTP POST и HTTP GET
|
Sound
|
Содержит звуковые данные .MP3 формата
|
NetStream
|
Содержит звуковые данные других форматов
|
NetConnection
|
Позволяет взаимодействовать 2 flash-роликам в одной области видимости (например на рабочем столе, или в одной вкладке браузера)
|
MovieClipLoader
|
Класс для подзагрузки swf роликов и .jpg .png изображений
|
EventListener
|
Обработчик событий
|
ActionScript 3
Элементарные типы данных
(см. документацию Adobe)
Тип
|
Описание
|
Boolean
|
Логическая величина, может принимать значения «true» или «false».
|
int
|
целочисленное 32-битное числовое значение в диапазоне от −231 до 231−1.
|
uint
|
целочисленное 32-битное числовое значение в диапазоне от 0 до 232−1.
|
Number
|
дробное 64-битное числовое значение в диапазоне от −263 до 263−1.
|
null
|
ноль. Ссылка на пустоту.
|
String
|
Строчка из 16-битных символов. Используется кодировка UTF-16.
|
void
|
тип данных с одним значением — undefined. Используется, если программист хочет указать тип функции как «невозвращаемый».
|
Сложные типы данных
(см. документацию Adobe)
Тип
|
Описание
|
Object
|
Объект. Ключевой класс ООП. Является основой всех классов AS3.
|
Array
|
Массив данных нестрогой типизации. Может принимать любые значения, например: ['a', 5, new TextField()]
|
Vector
|
Массив данных строгой типизации. Например массив Vector.<String> может содержать только строковые данные ['a','b',' ']
|
Date
|
Класс, содержащий сведения о дате/времени.
|
Error
|
Класс, содержащий ошибки.
|
Function
|
Основной класс. Примером является любой метод AS3.
|
RegExp
|
Регулярные выражения
|
XML
|
XML-объект, базирующийся на E4X (стандарт ECMA-357)
|
XMLList
|
Основанный на Array объект для поиска контента в XML-классе.
|
Пакеты
ActionScript 3.0 (а точнее Flash Player 9 API — можно сказать, стандартная библиотека, написанная на C++) состоит из более чем 700 классов, организованных в следующие пакеты (аналоги пространств имён в C++):
Пакет
|
Описание
|
flash.accessibility
|
классы для поддержки доступа в Flash контента и приложений.
|
flash.display
|
основные классы, которые Flash Player использует для вывода изображения на экран.
|
flash.errors
|
часто используемые классы обработки ошибок.
|
flash.external
|
содержит класс ExternalInterface, который используется для связи с контейнером Flash Player’а.
|
flash.filters
|
классы для работы с фильтрами растровых картинок.
|
flash.geom
|
классы для работы с геометрическими классами, такими как точки, прямоугольники и матрицы трансформации — для поддержки класса BitmapData и возможности кеширования изображений.
|
flash.media
|
классы для работы с мультимедиа — например, звуками и видео.
|
flash.net
|
классы для отправки и получения данных по сети. Например, запросы URL и Flash Remoting.
|
flash.printing
|
классы для вывода на печать содержимого Flash-фильма.
|
flash.profiler
|
функции, используемые для отладки и профилирования кода.
|
flash.system
|
классы для доступа к системе на уровне функциональности, такие как безопасность, многоязычного содержания и т. д.
|
flash.text
|
классы для работы с текстом, его форматированием, размером, стилем и расположением.
|
flash.ui
|
классы пользовательского интерфейса, такие как классы для работы с мышью и клавиатурой.
|
flash.utils
|
дополнительные классы, такие как ByteArray для работы с бинарными данными, Timer для отсчёта интервалов времени и др.
|
flash.xml
|
обеспечивает поддержку XML и все функции для работы с XML. (Необходим для поддержки предыдущих версий AS)
|
Также существуют mx.* пакеты, которые состоят из классов, предназначенных для создания интерфейса приложения в среде Flex и fl.* пакеты, для среды Flash
Популярные среды
- Adobe Flash — исторически первая среда, поддерживающая AS. Начиная с Flash 5 появилась панель «ACTIONS» с возможностью редактирования кода (AS1). Для Flash 6 был создан AS2. Начиная с Flash 9 появилась поддержка AS3.
- Adobe Flash Builder — среда разработки для создания RIA приложений для настольного компьютера и мобильных устройств.
- Powerflasher FDT — среда, признанная опытными флеш-программистами, базируется на eclipse — свободной интегрированной среде разработки модульных кроссплатформенных приложений.
- FlashDevelop — свободная среда разработки и редактор, написанные на C#, позволяющие создавать Flash-приложения при помощи Flash IDE, Flex SDK, MTASC или haxe.
- CodeDrive — среда разработки и редактор, с довольно быстрым компилятором, основана на Microsoft Visual Studio.
- SWFTools — свободный пакет для работы с swf-файлами, пакет включает компилятор ActionScript 3.0 (as3compile) .
Примечания
Ссылки