ActionScript

Поделись знанием:
Перейти к: навигация, поиск
К:Википедия:Статьи без источников (тип: не указан)
ActionScript
Класс языка:

Объектно-ориентированный, прототипный, императивный, скриптовый

Появился в:

1998

Автор:

Гарри Гроссман

Выпуск:

3.0

Система типов:

сильная, статическая

Основные реализации:

Adobe Flash Player, Adobe AIR, Apache Flex

Испытал влияние:

JavaScript, Java

ActionScript
MIME-тип

application/ecmascript[1]

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) являются открытым программным обеспечением.





История

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). Такое увеличение производительности возможно лишь для некоторых типов данных и требует особой организации кода[3]. Объём кода, как правило увеличивается в несколько раз[4] (по сравнению с 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 world!";
    }
}

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!";
        addChild(txtHello);
    }
}
}

MXML

Код, написанный на MXML (расширение XML):

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="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 и далее):

trace("Hello world!");

Структура

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

Элементарные типы данных

(см. [livedocs.adobe.com/flash/9.0/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file=00000047.html документацию 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. Используется, если программист хочет указать тип функции как «невозвращаемый».

Сложные типы данных

(см. [livedocs.adobe.com/flash/9.0/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file=00000047.html документацию 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.com CodeDrive] — Среда разработки и редактор, с довольно быстрым компилятором, основана на Microsoft Visual Studio.
  • SWFTools — Свободный пакет для работы с swf-файлами, пакет включает компилятор ActionScript 3.0 (as3compile) .

Напишите отзыв о статье "ActionScript"

Примечания

  1. RFC 4329 (limit compatible with EcmaScript)
  2. help.adobe.com/livedocs/specs/actionscript/3/wwhelp/wwhimpl/js/html/wwhelp.htm
  3. [www.onflex.org/ACDS/AS3TuningInsideAVM2JIT.pdf Ted Patrick | Entrepreneur, father, and interactive software developer]
  4. [www.adobe.com/devnet/actionscript/articles/six_reasons_as3.html Six reasons to use ActionScript 3.0 | Adobe Developer Connection]

Ссылки

  • [www.adobe.com/devnet/actionscript/ Страница на сайте Adobe]

Отрывок, характеризующий ActionScript

Но вдруг в 1812 м году французами одержана победа под Москвой, Москва взята, и вслед за тем, без новых сражений, не Россия перестала существовать, а перестала существовать шестисоттысячная армия, потом наполеоновская Франция. Натянуть факты на правила истории, сказать, что поле сражения в Бородине осталось за русскими, что после Москвы были сражения, уничтожившие армию Наполеона, – невозможно.
После Бородинской победы французов не было ни одного не только генерального, но сколько нибудь значительного сражения, и французская армия перестала существовать. Что это значит? Ежели бы это был пример из истории Китая, мы бы могли сказать, что это явление не историческое (лазейка историков, когда что не подходит под их мерку); ежели бы дело касалось столкновения непродолжительного, в котором участвовали бы малые количества войск, мы бы могли принять это явление за исключение; но событие это совершилось на глазах наших отцов, для которых решался вопрос жизни и смерти отечества, и война эта была величайшая из всех известных войн…
Период кампании 1812 года от Бородинского сражения до изгнания французов доказал, что выигранное сражение не только не есть причина завоевания, но даже и не постоянный признак завоевания; доказал, что сила, решающая участь народов, лежит не в завоевателях, даже на в армиях и сражениях, а в чем то другом.
Французские историки, описывая положение французского войска перед выходом из Москвы, утверждают, что все в Великой армии было в порядке, исключая кавалерии, артиллерии и обозов, да не было фуража для корма лошадей и рогатого скота. Этому бедствию не могло помочь ничто, потому что окрестные мужики жгли свое сено и не давали французам.
Выигранное сражение не принесло обычных результатов, потому что мужики Карп и Влас, которые после выступления французов приехали в Москву с подводами грабить город и вообще не выказывали лично геройских чувств, и все бесчисленное количество таких мужиков не везли сена в Москву за хорошие деньги, которые им предлагали, а жгли его.

Представим себе двух людей, вышедших на поединок с шпагами по всем правилам фехтовального искусства: фехтование продолжалось довольно долгое время; вдруг один из противников, почувствовав себя раненым – поняв, что дело это не шутка, а касается его жизни, бросил свою шпагу и, взяв первую попавшуюся дубину, начал ворочать ею. Но представим себе, что противник, так разумно употребивший лучшее и простейшее средство для достижения цели, вместе с тем воодушевленный преданиями рыцарства, захотел бы скрыть сущность дела и настаивал бы на том, что он по всем правилам искусства победил на шпагах. Можно себе представить, какая путаница и неясность произошла бы от такого описания происшедшего поединка.
Фехтовальщик, требовавший борьбы по правилам искусства, были французы; его противник, бросивший шпагу и поднявший дубину, были русские; люди, старающиеся объяснить все по правилам фехтования, – историки, которые писали об этом событии.
Со времени пожара Смоленска началась война, не подходящая ни под какие прежние предания войн. Сожжение городов и деревень, отступление после сражений, удар Бородина и опять отступление, оставление и пожар Москвы, ловля мародеров, переимка транспортов, партизанская война – все это были отступления от правил.
Наполеон чувствовал это, и с самого того времени, когда он в правильной позе фехтовальщика остановился в Москве и вместо шпаги противника увидал поднятую над собой дубину, он не переставал жаловаться Кутузову и императору Александру на то, что война велась противно всем правилам (как будто существовали какие то правила для того, чтобы убивать людей). Несмотря на жалобы французов о неисполнении правил, несмотря на то, что русским, высшим по положению людям казалось почему то стыдным драться дубиной, а хотелось по всем правилам стать в позицию en quarte или en tierce [четвертую, третью], сделать искусное выпадение в prime [первую] и т. д., – дубина народной войны поднялась со всей своей грозной и величественной силой и, не спрашивая ничьих вкусов и правил, с глупой простотой, но с целесообразностью, не разбирая ничего, поднималась, опускалась и гвоздила французов до тех пор, пока не погибло все нашествие.
И благо тому народу, который не как французы в 1813 году, отсалютовав по всем правилам искусства и перевернув шпагу эфесом, грациозно и учтиво передает ее великодушному победителю, а благо тому народу, который в минуту испытания, не спрашивая о том, как по правилам поступали другие в подобных случаях, с простотою и легкостью поднимает первую попавшуюся дубину и гвоздит ею до тех пор, пока в душе его чувство оскорбления и мести не заменяется презрением и жалостью.


Одним из самых осязательных и выгодных отступлений от так называемых правил войны есть действие разрозненных людей против людей, жмущихся в кучу. Такого рода действия всегда проявляются в войне, принимающей народный характер. Действия эти состоят в том, что, вместо того чтобы становиться толпой против толпы, люди расходятся врозь, нападают поодиночке и тотчас же бегут, когда на них нападают большими силами, а потом опять нападают, когда представляется случай. Это делали гверильясы в Испании; это делали горцы на Кавказе; это делали русские в 1812 м году.
Войну такого рода назвали партизанскою и полагали, что, назвав ее так, объяснили ее значение. Между тем такого рода война не только не подходит ни под какие правила, но прямо противоположна известному и признанному за непогрешимое тактическому правилу. Правило это говорит, что атакующий должен сосредоточивать свои войска с тем, чтобы в момент боя быть сильнее противника.
Партизанская война (всегда успешная, как показывает история) прямо противуположна этому правилу.
Противоречие это происходит оттого, что военная наука принимает силу войск тождественною с их числительностию. Военная наука говорит, что чем больше войска, тем больше силы. Les gros bataillons ont toujours raison. [Право всегда на стороне больших армий.]
Говоря это, военная наука подобна той механике, которая, основываясь на рассмотрении сил только по отношению к их массам, сказала бы, что силы равны или не равны между собою, потому что равны или не равны их массы.
Сила (количество движения) есть произведение из массы на скорость.
В военном деле сила войска есть также произведение из массы на что то такое, на какое то неизвестное х.
Военная наука, видя в истории бесчисленное количество примеров того, что масса войск не совпадает с силой, что малые отряды побеждают большие, смутно признает существование этого неизвестного множителя и старается отыскать его то в геометрическом построении, то в вооружении, то – самое обыкновенное – в гениальности полководцев. Но подстановление всех этих значений множителя не доставляет результатов, согласных с историческими фактами.
А между тем стоит только отрешиться от установившегося, в угоду героям, ложного взгляда на действительность распоряжений высших властей во время войны для того, чтобы отыскать этот неизвестный х.
Х этот есть дух войска, то есть большее или меньшее желание драться и подвергать себя опасностям всех людей, составляющих войско, совершенно независимо от того, дерутся ли люди под командой гениев или не гениев, в трех или двух линиях, дубинами или ружьями, стреляющими тридцать раз в минуту. Люди, имеющие наибольшее желание драться, всегда поставят себя и в наивыгоднейшие условия для драки.
Дух войска – есть множитель на массу, дающий произведение силы. Определить и выразить значение духа войска, этого неизвестного множителя, есть задача науки.
Задача эта возможна только тогда, когда мы перестанем произвольно подставлять вместо значения всего неизвестного Х те условия, при которых проявляется сила, как то: распоряжения полководца, вооружение и т. д., принимая их за значение множителя, а признаем это неизвестное во всей его цельности, то есть как большее или меньшее желание драться и подвергать себя опасности. Тогда только, выражая уравнениями известные исторические факты, из сравнения относительного значения этого неизвестного можно надеяться на определение самого неизвестного.
Десять человек, батальонов или дивизий, сражаясь с пятнадцатью человеками, батальонами или дивизиями, победили пятнадцать, то есть убили и забрали в плен всех без остатка и сами потеряли четыре; стало быть, уничтожились с одной стороны четыре, с другой стороны пятнадцать. Следовательно, четыре были равны пятнадцати, и, следовательно, 4а:=15у. Следовательно, ж: г/==15:4. Уравнение это не дает значения неизвестного, но оно дает отношение между двумя неизвестными. И из подведения под таковые уравнения исторических различно взятых единиц (сражений, кампаний, периодов войн) получатся ряды чисел, в которых должны существовать и могут быть открыты законы.
Тактическое правило о том, что надо действовать массами при наступлении и разрозненно при отступлении, бессознательно подтверждает только ту истину, что сила войска зависит от его духа. Для того чтобы вести людей под ядра, нужно больше дисциплины, достигаемой только движением в массах, чем для того, чтобы отбиваться от нападающих. Но правило это, при котором упускается из вида дух войска, беспрестанно оказывается неверным и в особенности поразительно противоречит действительности там, где является сильный подъем или упадок духа войска, – во всех народных войнах.
Французы, отступая в 1812 м году, хотя и должны бы защищаться отдельно, по тактике, жмутся в кучу, потому что дух войска упал так, что только масса сдерживает войско вместе. Русские, напротив, по тактике должны бы были нападать массой, на деле же раздробляются, потому что дух поднят так, что отдельные лица бьют без приказания французов и не нуждаются в принуждении для того, чтобы подвергать себя трудам и опасностям.


Так называемая партизанская война началась со вступления неприятеля в Смоленск.
Прежде чем партизанская война была официально принята нашим правительством, уже тысячи людей неприятельской армии – отсталые мародеры, фуражиры – были истреблены казаками и мужиками, побивавшими этих людей так же бессознательно, как бессознательно собаки загрызают забеглую бешеную собаку. Денис Давыдов своим русским чутьем первый понял значение той страшной дубины, которая, не спрашивая правил военного искусства, уничтожала французов, и ему принадлежит слава первого шага для узаконения этого приема войны.
24 го августа был учрежден первый партизанский отряд Давыдова, и вслед за его отрядом стали учреждаться другие. Чем дальше подвигалась кампания, тем более увеличивалось число этих отрядов.
Партизаны уничтожали Великую армию по частям. Они подбирали те отпадавшие листья, которые сами собою сыпались с иссохшего дерева – французского войска, и иногда трясли это дерево. В октябре, в то время как французы бежали к Смоленску, этих партий различных величин и характеров были сотни. Были партии, перенимавшие все приемы армии, с пехотой, артиллерией, штабами, с удобствами жизни; были одни казачьи, кавалерийские; были мелкие, сборные, пешие и конные, были мужицкие и помещичьи, никому не известные. Был дьячок начальником партии, взявший в месяц несколько сот пленных. Была старостиха Василиса, побившая сотни французов.
Последние числа октября было время самого разгара партизанской войны. Тот первый период этой войны, во время которого партизаны, сами удивляясь своей дерзости, боялись всякую минуту быть пойманными и окруженными французами и, не расседлывая и почти не слезая с лошадей, прятались по лесам, ожидая всякую минуту погони, – уже прошел. Теперь уже война эта определилась, всем стало ясно, что можно было предпринять с французами и чего нельзя было предпринимать. Теперь уже только те начальники отрядов, которые с штабами, по правилам ходили вдали от французов, считали еще многое невозможным. Мелкие же партизаны, давно уже начавшие свое дело и близко высматривавшие французов, считали возможным то, о чем не смели и думать начальники больших отрядов. Казаки же и мужики, лазившие между французами, считали, что теперь уже все было возможно.