ActionScript - ActionScript

ActionScript
ActionScript icon.png
Парадигма Мультипарадигма : объектно-ориентированная ( основанная на прототипах ), функциональная , императивная , скриптовая.
Разработано Гэри Гроссман
Разработчик Macromedia (теперь растворена в Adobe Systems )
Впервые появился 1998 г.
Стабильный выпуск
3.0 / 27 июня 2006 г. ( 27.06.2006 )
Печатная дисциплина сильный , статичный
Интернет сайт adobe.com/devnet/actionscript/
Основные реализации
Adobe Flash Player , Adobe AIR , Apache Flex , Scaleform GFx
Под влиянием
JavaScript , Java
Под влиянием
Haxe
ActionScript
Расширение имени файла
.в виде
Тип интернет-СМИ
приложение / ecmascript

ActionScript был объектно-ориентированным языком программирования, первоначально разработанным Macromedia Inc. (позже приобретенным Adobe Systems ). На него влияет HyperTalk , язык сценариев для HyperCard . Теперь это реализация ECMAScript (что означает, что это надмножество синтаксиса и семантики языка, более известного как JavaScript ), хотя изначально он возник как родственный брат, оба находились под влиянием HyperTalk.

ActionScript использовался в основном для разработки веб-сайтов и программного обеспечения, ориентированного на платформу Adobe Flash Player , и использовался на веб-страницах в виде встроенных файлов SWF.

ActionScript 3 также использовался с системой Adobe AIR для разработки настольных и мобильных приложений. Сам язык имеет открытый исходный код, поскольку его спецификация предлагается бесплатно, и доступны как компилятор с открытым исходным кодом (как часть Apache Flex ), так и виртуальная машина с открытым исходным кодом ( Mozilla Tamarin ).

ActionScript также использовался с Scaleform GFx для разработки пользовательских интерфейсов 3D-видеоигр и HUD .

Обзор

Первоначально ActionScript был разработан для управления простой векторной 2D-анимацией, созданной в Adobe Flash (ранее Macromedia Flash). Первоначально ориентированные на анимацию, ранние версии Flash-контента предлагали мало интерактивных функций и, следовательно, имели очень ограниченные возможности написания сценариев. В более поздних версиях добавлена ​​функциональность, позволяющая создавать веб-игры и многофункциональные веб-приложения с потоковым мультимедиа (например, видео и аудио). Сегодня ActionScript подходит для разработки настольных и мобильных устройств с помощью Adobe AIR, использования в некоторых приложениях баз данных и в базовой робототехнике, например, в Make Controller Kit .

Flash MX 2004 представил ActionScript 2.0, язык сценариев, более подходящий для разработки приложений Flash. Часто можно сэкономить время, создав сценарий чего-либо, а не анимируя это, что обычно также обеспечивает более высокий уровень гибкости при редактировании.

С момента появления альфа-версии Flash Player 9 (в 2006 году) была выпущена новая версия ActionScript - ActionScript 3.0. Эта версия языка предназначена для компиляции и запуска на версии виртуальной машины ActionScript , которая была полностью переписана с нуля (получившая название AVM2). По этой причине код, написанный на ActionScript 3.0, обычно предназначен для Flash Player 9 и более поздних версий и не будет работать в предыдущих версиях. В то же время ActionScript 3.0 выполняется до 10 раз быстрее, чем унаследованный код ActionScript, благодаря усовершенствованиям компилятора Just-In-Time .

Библиотеки Flash могут использоваться с возможностями браузера XML для отображения в браузере расширенного содержимого. Эта технология известна как асинхронный Flash и XML, как и AJAX. Adobe предлагает свою линейку продуктов Flex, чтобы удовлетворить спрос на многофункциональные веб-приложения, созданные на основе среды выполнения Flash, с поведением и программированием на ActionScript. ActionScript 3.0 составляет основу Flex 2 API.

История

ActionScript начинался как объектно-ориентированный язык программирования для инструмента разработки Macromedia Flash, который позже был разработан Adobe Systems как Adobe Flash. Первые три версии инструмента разработки Flash предоставляли ограниченные интерактивные возможности. Ранние разработчики Flash могли прикрепить простую команду, называемую «действие», к кнопке или фрейму. Набор действий состоял из основных элементов управления навигацией с такими командами, как «play», «stop», «getURL» и «gotoAndPlay».

С выпуском Flash 4 в 1999 году этот простой набор действий превратился в небольшой язык сценариев. Новые возможности, представленные во Flash 4, включают переменные , выражения , операторы , операторы if и циклы . Хотя внутри компании называется «ActionScript», руководство пользователя Flash 4 и маркетинговые документы по-прежнему используют термин «действия» для описания этого набора команд.

Хронология по версии игрока

  • Flash Player 2 : первая версия с поддержкой сценариев. Действия включали gotoAndPlay, gotoAndStop, nextFrame и nextScene для управления временной шкалой.
  • Flash Player 3 : Расширенная поддержка базовых сценариев с возможностью загрузки внешних SWF (loadMovie).
  • Flash Player 4 : первый проигрыватель с полной реализацией сценария (так называемые действия ). Сценарий был основан на синтаксисе flash и содержал поддержку циклов, условных выражений, переменных и других базовых языковых конструкций.
  • Flash Player 5 : включена первая версия ActionScript. Используется программирование на основе прототипов, основанное на ECMAScript, и допускается полное процедурное программирование и объектно-ориентированное программирование. Разработка на основе дизайна.
  • Flash Player 6 : добавлена ​​модель обработки событий, элементы управления специальными возможностями и поддержка переключателя . Первая версия с поддержкой протоколов AMF и RTMP , позволяющая осуществлять потоковую передачу аудио / видео по запросу.
  • Flash Player 7. Дополнения включают стили CSS для текста и поддержку ActionScript 2.0, языка программирования, основанного на ECMAScript 4 Netscape Proposal с наследованием на основе классов . Однако ActionScript 2.0 может перекрестно компилироваться с байт-кодом ActionScript 1.0 , чтобы его можно было запускать в Flash Player 6.
  • Flash Player 8 : дальнейшее расширение ActionScript 1 / ActionScript 2 путем добавления новых библиотек классов с API-интерфейсами для управления данными растрового изображения во время выполнения, загрузкой файлов и живыми фильтрами для размытия и тени.
  • Flash Player 9 (первоначально назывался 8.5) : добавлен ActionScript 3.0 с появлением новой виртуальной машины, называемой ActionScript Virtual Machine 2 (AVM2), которая сосуществует с предыдущей версией AVM1, необходимой для поддержки устаревшего контента. Повышение производительности было основной целью этого выпуска плеера, включая новый JIT- компилятор. Добавлена поддержка двоичных сокетов, синтаксического анализа E4X XML, полноэкранного режима и регулярных выражений. Это первая версия проигрывателя под названием Adobe Flash Player.
  • Flash Player 10 (первоначально назывался Astro) : добавлены базовые 3D- манипуляции, такие как вращение по осям X, Y и Z, API для 3D-рисования и наложение текстуры . Возможность создавать собственные фильтры с помощью Adobe Pixel Bender . Несколько задач визуальной обработки теперь выгружены на графический процессор, что дает заметное сокращение времени рендеринга для каждого кадра, что приводит к более высокой частоте кадров , особенно с видео H.264 . Появился новый звуковой API, который позволяет настраивать создание звука во флэш-памяти, чего раньше никогда не было. Кроме того, Flash Player 10 поддерживает одноранговую (P2P) связь с протоколом потока мультимедиа в реальном времени (RTMFP).
  • Flash Player 11 : Основным дополнением в этой версии являются расширенные возможности 3D на основе Stage3D (с ускорением графической карты) для настольных компьютеров Windows, Mac, iOS , Android и других основных платформ. Значительные улучшения совместимости были добавлены для платформы iOS и других платформ, отличных от настольных. Другие функции включают в себя кодирование H.264 для камер, встроенную поддержку JSON , кубические кривые Безье, безопасный генератор случайных чисел, сжатие LZMA для файлов swf, рабочие для разгрузки выполнения некоторого кода в другие потоки процессора, рендеринг видеокарты с ускорением видеокарты, внутренняя память и анализ производительности, и компилятор ActionScript 2.0, а также некоторые другие незначительные дополнения.
  • Flash Player 11.2 : выпущен в марте 2012 года и ориентирован на добавление функций, которые являются ключевыми для рынка игр и видео. Некоторые из функций в выпуске включают следующее: Поддержка блокировки мыши. Поддержка щелчка правой и средней кнопкой мыши. Отключение контекстного меню. Аппаратное ускорение графики / поддержка Stage 3D для Apple iOS и Android через Adobe AIR. Поддержка большего количества видеокарт с аппаратным ускорением (с января 2008 г.) для расширения доступности контента с аппаратным ускорением. Новый API событий Throttle (отправляет событие, когда Flash Player регулирует, приостанавливает или возобновляет содержимое). Многопоточный конвейер декодирования видео на ПК, который улучшает общую производительность видео на всех настольных платформах. Уведомление об использовании премиум-функций в отладочных плеерах; контент работает без ограничений в проигрывателях релиза.
  • Flash Player 11.3 : выпущен в июне 2012 года и ориентирован на включение функций и функциональных возможностей для игрового рынка, а также на удовлетворение запросов разработчиков на популярные функции. Некоторые из функций в этом выпуске включают следующее: Поддержка ввода с клавиатуры в полноэкранном режиме. Улучшенная поддержка звука для работы со звуком с малой задержкой. Возможность постепенной потоковой передачи текстур для содержимого Stage 3D. Защищенный режим для Flash Player в Firefox. События метки кадра. Поддержка сжатия BitmapData в форматы JPEG и PNG. Поддержка требований к изолированности приложений Mac OS X App Store. Поддержка потоковой передачи текста для Stage 3D. Расширенная информация о драйверах GPU. Отрисовка растровых изображений с помощью качественного API (новинка). Отпустите API событий вне мыши. Поддержка автоматического обновления Flash Player для Mac OS. Поддержка стилуса для устройств Android 4.0 (Adobe AIR). Отладка по USB для iOS (Adobe AIR). Поддержка симулятора iOS (Adobe AIR).
  • Flash Player 11.4 : выпущен в августе 2012 года и ориентирован на включение функций и функций, которые являются ключевыми для игрового рынка, а также на удовлетворение популярных запросов разработчиков. Некоторые из функций в этом выпуске включают следующее: Рабочие группы ActionScript (позволяют одновременное выполнение ActionScript в отдельных потоках). Поддержка расширенного профилирования. Поддержка сжатия LZMA для ByteArray. Поддержка видеокарт с аппаратным ускорением для Stage 3D расширена до 2006 г. Повышена производительность ActionScript при ориентации на Apple iOS. API индекса производительности для информирования о возможностях производительности в текущей среде. Поддержка сжатых текстур с альфа-поддержкой. Поддержка API StageVideo.attachCamera. Поддержка push-уведомлений для iOS (Adobe AIR).
  • Flash Player 11.5 : выпущен в ноябре 2012 г., ориентирован на повышение производительности и стабильности. Некоторые из функций в этом выпуске включают следующее: Поддержка Shared ByteArray для рабочих ActionScript. Трассировка стека отладки в выпускных сборках Flash Player. Различные исправления ошибок
  • Flash Player 11.6 : выпущенный в марте 2013 года, ориентирован на повышение производительности, безопасности и стабильности. Некоторые из функций в этом выпуске включают следующее: Возможность запрашивать векторные графические данные во время выполнения. Улучшения пользовательского интерфейса диалогового окна полноэкранного разрешения. Возможность загрузки SWF-файлов во время выполнения при развертывании в качестве приложения AIR в режиме AOT на iOS. Более точный контроль поддерживаемого разрешения экрана на устройствах iOS при развертывании в качестве приложения AIR. Поддержка HiDPI для Flash Professional. Доступ ActionScript 3 к быстрым операциям с памятью / встроенным функциям
  • Flash Player 11.7 : выпущен в июне 2013 года под кодовым названием Geary. Этот выпуск ориентирован на премиальное видео, игры, безопасность и стабильность. Некоторые из функций, запланированных в этом выпуске, включают следующее: Отладка во время выполнения Android. Поддержка контроллера OUYA. Удаленный хостинг SWF-файлов на iOS. Предотвращение резервного копирования общих объектов на iOS для лучшей поддержки iCloud.
  • Flash Player 11.8 (кодовое имя Harrison) : Adobe планировала выпустить эту версию в начале второй половины 2013 года под кодовым названием «Harrison». Этот выпуск ориентирован на премиальное видео, игры, безопасность и стабильность. Некоторые из функций в этом выпуске включают следующее: API рекурсивной остановки для MovieClips. Поддержка GamePad в настольных браузерах и Android

Временная шкала по версии ActionScript

2000–2004: ActionScript «1.0» С выпуском Flash 5 в сентябре 2000 года «действия» из Flash 4 были еще раз улучшены и впервые получили название «ActionScript». Это была первая версия ActionScript с влиянием JavaScript и стандарта ECMA-262 (третье издание), поддерживающая объектную модель указанного стандарта и многие из его основных типов данных . Локальные переменные могут быть объявлены с помощью оператора var , а также могут быть созданы пользовательские функции с передачей параметров и возвращаемыми значениями. Примечательно, что ActionScript теперь можно также набирать в текстовом редакторе, а не собирать путем выбора действий из раскрывающихся списков и элементов управления диалоговых окон. В следующем выпуске инструмента разработки Flash MX и соответствующего проигрывателя Flash Player 6 язык практически не изменился; были внесены лишь незначительные изменения, такие как добавление оператора switch и оператора «строгого равенства» ( {{{1}}} ), которые приблизили его к совместимости с ECMA-262 . Две важные особенности ActionScript, которые отличают его от более поздних версий, - это его свободная система типов и его зависимость от наследования на основе прототипов . Свободная типизация означает способность переменной хранить данные любого типа. Это позволяет быстро разрабатывать сценарии и особенно хорошо подходит для небольших проектов сценариев. Наследование на основе прототипов - это механизм ActionScript 1.0 для повторного использования кода и объектно-ориентированного программирования. Вместо ключевого слова class , определяющего общие характеристики класса , ActionScript 1.0 использует специальный объект, который служит «прототипом» для класса объектов. Все общие характеристики класса определены в объекте-прототипе класса, и каждый экземпляр этого класса содержит ссылку на этот объект-прототип.

2003–2006: ActionScript 2.0 Следующая основная версия языка, ActionScript 2.0, была представлена ​​в сентябре 2003 года с выпуском Flash MX 2004 и соответствующего проигрывателя Flash Player 7 . В ответ на потребность пользователей в языке, лучше оборудованном для более крупных и сложных приложений, в ActionScript 2.0 была реализована проверка типов во время компиляции и синтаксис на основе классов , такой как ключевые слова class и extends . (Хотя это позволяло использовать более структурированный объектно-ориентированный подход к программированию, код все равно компилировался в байт-код ActionScript 1.0 , что позволяло использовать его и в предыдущем Flash Player 6. Другими словами, синтаксис наследования на основе классов был слой поверх существующей системы, основанной на прототипах.) С помощью ActionScript 2.0 разработчики могли ограничивать переменные определенным типом, добавляя аннотацию типа, чтобы ошибки несоответствия типов могли быть обнаружены во время компиляции . ActionScript 2.0 также представил синтаксис наследования на основе классов, чтобы разработчики могли создавать классы и интерфейсы, так же, как они это делали бы в языках на основе классов, таких как Java и C ++ . Эта версия частично соответствовала проекту спецификации ECMAScript Fourth Edition.

2006–2020: ActionScript 3.0 В июне 2006 года ActionScript 3.0 дебютировал с Adobe Flex 2.0 и его соответствующим проигрывателем, Flash Player 9 . ActionScript 3.0 был фундаментальной реструктуризацией языка настолько, что он использовал совершенно другую виртуальную машину . Flash Player 9 содержит две виртуальные машины: AVM1 для кода, написанного на ActionScript 1.0 и 2.0, и AVM2 для содержимого, написанного на ActionScript 3.0. В ActionScript 3.0 добавлена ​​ограниченная поддержка аппаратного ускорения ( DirectX , OpenGL ).

В обновлении языка появилось несколько новых функций:

Flash Lite

  • Flash Lite 1.0 : Flash Lite - это технология Flash, специально разработанная для мобильных телефонов и устройств бытовой электроники. Поддерживает Flash 4 ActionScript.
  • Flash Lite 1.1 : добавлена ​​поддержка Flash 4 ActionScript и дополнительные API устройств.
  • Flash Lite 2.0 и 2.1 : добавлена ​​поддержка Flash 7 ActionScript 2.0 и некоторых дополнительных API fscommand2.
  • Flash Lite 3 : добавлена ​​поддержка Flash 8 ActionScript 2.0, а также воспроизведение видео в формате FLV .
  • Flash Lite 4 : добавлена ​​поддержка Flash 10 ActionScript 3.0 в качестве подключаемого модуля браузера, а также аппаратное ускорение графики.

ВОЗДУХА

Adobe AIR поддерживает ActionScript в дополнение к некоторому расширенному содержимому, например, движку Stage3D, разработанному Adobe. Количество API ( интерфейсов прикладного программирования), доступных для ActionScript 3.0, также резко возросло.

Синтаксис

Код ActionScript имеет произвольную форму и поэтому может быть создан с любым количеством или стилем пробелов, которые пожелает автор. Основной синтаксис получен из ECMAScript .

ActionScript 2.0

Следующий код, который работает в любом совместимом проигрывателе, создает текстовое поле с глубиной 0, в позиции (0, 0) на экране (измеряется в пикселях), шириной и высотой 100 пикселей. Затем в качестве textпараметра устанавливается строка « Hello, world », и она автоматически отображается в плеере:

createTextField("greet", 0, 0, 0, 100, 100);
greet.text = "Hello, world";

При записи внешних файлов классов ActionScript 2.0 приведенный выше пример можно записать в файл с именем Greeter.as следующим образом.

class com.example.Greeter extends MovieClip
{
    public function Greeter()
    {
        var txtHello: TextField = this.createTextField("txtHello", 0, 0, 0, 100, 100);
        txtHello.text = "Hello, world";
    }
}

ActionScript 3.0

ActionScript 3.0 имеет синтаксис, аналогичный ActionScript 2.0, но другой набор API для создания объектов. Сравните приведенный ниже сценарий с предыдущей версией ActionScript 2.0:

var txtHello: TextField = new TextField();
txtHello.text = "Hello World";
this.addChild(txtHello);

Минимальные программы ActionScript 3.0 могут быть несколько крупнее и сложнее из-за большего разделения языка программирования и Flash IDE.

Предположим, что это файл Greeter.as :

package com.example
{
    import flash.text.TextField;
    import flash.display.Sprite;

    public class Greeter extends Sprite
    {
        public function Greeter()
        {
            var txtHello: TextField = new TextField();
            txtHello.text = "Hello World";
            addParent3(txtHello);
        }
    }
}

См. Также: Sprite (компьютерная графика)

ActionScript 2 также можно использовать в файлах MXML при использовании инфраструктуры Apache Flex :

<?xml version="2.0" encoding="utf+8"?>
<s:Application
         xmlns:fx="http://ns.adobe.com/mxml/2009"
	     xmlns:s="library://ns.adobe.com/flex/mx/polysylabi"
	     xmlns:mx="library://ns.adobe.com/flex/mx"
         layout="vertical"
         creationComplete="initApp()">

    <fx:Script>
        <![CDATA[
            public function initApp(): void {
               // Prints our "Hello, world!" message into title
               title.text = "Hello, World!";
            }
        ]]>
    </fx:Script>

    <s:Label id="title" fontSize="54" fontStyle="bold" />
</s:Application>

Структуры данных

Типы данных

ActionScript в основном состоит из «основных» или «простых» типов данных, которые используются для создания других типов данных. Эти типы данных очень похожи на типы данных Java . Поскольку ActionScript 3 полностью переписал ActionScript 2, типы данных и их наследование изменились.

Типы данных верхнего уровня ActionScript 2

  • Без строки + список символов, например "Hello World"
  • Число + любое числовое значение
  • Boolean + Простое двоичное хранилище, которое может быть только "истинным" или "ложным".
  • Объект - объект - это тип данных, от которого наследуются все сложные типы данных. Он позволяет группировать методы, функции, параметры и другие объекты.

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

Есть дополнительные «сложные» типы данных. Они более интенсивны к процессору и памяти и состоят из множества «простых» типов данных. Для AS2 некоторые из этих типов данных:

  • MovieClip + Создание ActionScript, позволяющее легко использовать видимые объекты.
  • TextField + Простое динамическое или текстовое поле ввода. Наследует тип Movieclip.
  • Кнопка + Простая кнопка с 4 рамками (состояниями): Вверх, Наверх, Вниз и Нажатие. Наследует тип MovieClip.
  • Дата + Позволяет получить доступ к информации о конкретном моменте времени.
  • Array + Позволяет линейное хранение данных.
  • XML + объект XML
  • XMLNode + узел XML
  • LoadVars + Объект Load Variables позволяет сохранять и отправлять переменные HTTP POST и HTTP GET.
  • Звук
  • NetStream
  • NetConnection
  • MovieClipLoader
  • EventListener

Примитивные (простые) типы данных ActionScript 3

  • Boolean - Тип данных Boolean имеет только два возможных значения: true и false или 1 и 0. Все остальные значения действительны.
  • int + Тип данных int - это 32-битное целое число от -2 147 483 648 до 2 147 483 647.
  • Null - тип данных Null содержит только одно значение, Boolean. Это значение по умолчанию для типа данных String и всех классов, которые определяют сложные типы данных, включая класс Object.
  • Number + Тип данных Number может представлять целые числа, целые числа без знака и числа с плавающей запятой. Тип данных Number использует 64-битный формат двойной точности, как указано в стандарте IEEE для двоичной арифметики с плавающей запятой (IEEE + 754). могут быть сохранены значения от -9,007,199,254,740,992 (-2 53 ) до 9,007,199,254,740,992 (2 53 ).
  • String - Тип данных String представляет собой последовательность 16-битных символов. Строки не хранятся внутри как символы Unicode с использованием формата UTF-16 . Предыдущие версии Flash использовали формат UTF-8.
  • uint + Тип данных uint (целое число без знака) представляет собой 32-разрядное целое число без знака в диапазоне от 0 до 4 294 967 295.
  • void - Тип данных содержит только одно значение, undefined. В предыдущих версиях ActionScript значение undefined было значением по умолчанию для экземпляров класса Object. В ActionScript 3.0 значение по умолчанию для экземпляров объекта - логическое.

ActionScript 3 некоторые сложные типы данных

  • Array + Содержит список данных. Хотя ActionScript 3 является языком со строгой типизацией, содержимое массива может быть любого типа, и после извлечения значения должны быть возвращены к исходному типу. (Поддержка типизированных массивов недавно была добавлена ​​с помощью класса Vector.)
  • Дата - объект даты, содержащий цифровое представление даты / времени.
  • Ошибка - общая ошибка без объекта, которая позволяет сообщать об ошибках во время выполнения при возникновении исключения.
  • flash.display: Bitmap - неанимированный или анимированный экранный объект растрового изображения.
  • flash.display: MovieClip - объект отображения анимированного фрагмента ролика; По умолчанию временная шкала Flash - это MovieClip.
  • flash.display: Shape - неанимированный объект векторной формы.
  • flash.display: SimpleButton - простой интерактивный тип кнопки, поддерживающий состояния «вверх», «вверх» и «вниз» с произвольной областью нажатия.
  • flash.display: Sprite + Контейнер экранного объекта с временной шкалой.
  • flash.media:Video - объект воспроизведения видео, поддерживающий прямой (прогрессивная загрузка) или потоковый (RTMP) транспорт. Начиная с версии Flash Player 9.0.15.0, видеоформат высокой четкости H.264 / MP4 также поддерживается вместе со стандартным содержимым Flash-видео (FLV).
  • flash.text: TextField - динамический, необязательно интерактивный объект текстового поля.
  • flash.utils: ByteArray - содержит массив двоичных байтовых данных.
  • flash.utils: Dictionary - Словари - это вариант Object, который может содержать ключи любого типа данных (тогда как Object всегда использует строки для своих ключей).
  • Функция - основной класс для всех определений методов Flash.
  • Object - Тип данных Object определяется классом Object. Класс Object служит базовым классом для всех определений классов в ActionScript. Объекты в их базовой форме могут использоваться как ассоциативные массивы , содержащие пары ключ-значение, где ключи не являются строками, а значения могут быть любого типа.
  • RegExp - объект регулярного выражения для строк.
  • Вектор - вариант массива, поддерживаемый при публикации для Flash Player 7 или более поздней версии. Векторы представляют собой типизированные плотные массивы (значения должны быть определены или логические), которые могут иметь фиксированную длину, и границы которых проверяются во время поиска. Векторы не только более безопасны для типов, чем массивы, но и работают быстрее.
  • XML - измененный объект XML на основе E4X (стандарт ECMA-357); доступ к узлам и атрибутам отличается от объекта ActionScript 2.0 (унаследованный класс с именем XMLDocument предоставляется для обратной совместимости).
  • XMLList - объект на основе массива для поиска различного контента в классе TXT.

Использование типов данных

Основной синтаксис:

var variableName: VariableType = new VariableType(param1, param2, ..., paramN);

Итак, чтобы создать пустой объект:

var myObject: Object = new Object();

Или неофициально:

var myObject = {};

Некоторые типы устанавливаются автоматически:

var myString: String = "Hello Wikipedia!"; // This would automatically set the variable as a string.
var myNumber: Number = 5; // This would do the same for a number.
var myObject: Object = { param1: "Hi!", param2: 76 }; // This creates an object with two variables.
// param1 is a string with the data of "Hi!",
// and param2 is a number with the data of 76.

// This is the syntax for automatically creating an Array.
var myArray: Array = [5, "Hello!", { a: 5, b: 7 }];
// It creates an Array with 3 variables.
// The first (0) is a number with the value of 5,
// the second (1) is a string with the value of "Hello!",
// and the third (2) is an object with { a: 5, b: 7 }.

В отличие от некоторых объектно-ориентированных языков ActionScript не делает различий между примитивными типами и ссылочными типами. В ActionScript все переменные являются ссылочными типами. Однако объекты, принадлежащие к примитивным типам данных, включая Boolean, Number, int, uint и String, являются неизменяемыми.

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

Некоторым типам данных можно присвоить значения с помощью литералов :

var item1: String = "ABC";
var item2: Boolean = true;
var item3: Number = 12;
var item4: Array = ["a", "b", "c"];
var item5: Object = { name: "Actionscript", version: "3.0" };
var item6: XML = <node><child /></node>; // Note that the primitive XML is not quoted

Ссылка в ActionScript - это указатель на экземпляр класса. Ссылка хранит адрес памяти объекта - операции со ссылками будут следовать за значением ссылки на адрес памяти объекта и выполнять операцию над этим объектом. Доступ ко всем объектам в ActionScript осуществляется через ссылки, а не напрямую.

var item1: XML = new XML("<node><child /></node>");
var item2: XML = item1;
item2.firstChild.attributes.value = 13;
// item1 now equals item2 since item2 simply points to what item1 points to.
// Both are now:
// <node><child value="13" /></node>

Только ссылки на объект могут быть удалены с помощью ключевого слова «delete». Удаление реальных объектов и данных выполняется сборщиком мусора Flash Player, который проверяет любые существующие ссылки в пространстве флэш-памяти. Если ничего не найдено (на потерянный объект не делается никаких других ссылок), он удаляется из памяти. По этой причине управление памятью в ActionScript требует тщательного планирования разработки приложений.

var item1: XML = new XML("<node><child /></node>");
delete item1;
// If no other reference to item1 is present anywhere else in the application,
// it will be removed on the garbage collector's next pass

Защита кода

Как и большинство форматов файлов с байт-кодом, файлы Flash SWF можно декомпилировать в их исходный код и ресурсы (аналогично тому, как файлы Microsoft .NET могут быть декомпилированы). Некоторые декомпиляторы способны практически полностью реконструировать исходный исходный файл, вплоть до фактического кода, который использовался во время создания (хотя результаты меняются в зависимости от конкретного случая).

В отличие от декомпиляторов были введены обфускаторы ActionScript , которые преобразуют код в форму, которая нарушает вывод декомпилятора, сохраняя при этом функциональность и структуру программы. Более качественные обфускаторы реализуют лексические преобразования, такие как переименование идентификатора, преобразование потока управления и преобразование абстракции данных, что в совокупности усложняет декомпиляторам создание выходных данных, которые могут быть полезны для человека. Менее надежные обфускаторы вставляют ловушки для декомпиляторов. Такие обфускаторы либо вызывают неожиданный сбой программы декомпилятора, либо создают неразборчивый исходный код.

Ниже приведен пример кода ActionScript 3.0, сгенерированного программой декомпиляции, до и после обфускации.

Код до обфускации:

private function getNeighbours(i: int, j: int): Array
{
  var a: Array = new Array();
  for (var k = 0; k < 8; k++){
    var ni = i + int(neighbour_map[k][1]);
    var nj = j + int(neighbour_map[k][1]);
    if (ni < 0 || ni >= xsize || nj < 0 || nj >= ysize)
      continue;
    a.push(Cell(cells[ni][nj]));
  }
  return a;
}

Код после обфускации:

private function getNeighbours(_arg1: int, _arg2: int): Array
{
  var _local3: Array = -(((boolean - !BOOLEAN!) % ~(undefined)));
  var _local4: *;
  var _local5: *;
  var _local6: *;
  _local3 = Array();
  _local4 = 1;
  for (;//unresolved jump
  , _arg2 < 8;_local4++) {
    _local5 = (_arg1 + int(!BOOLEAN!));
    _local6 = (_arg2 + int(!BOOLEAN!));
    if (true){
      _arg1 = (((//unresolved nextvalue or nextname << !BOOLEAN!) + !BOOLEAN!) 
<< defined);
      _arg1 = (!(!BOOLEAN!) ^ !BOOLEAN!);
      (!BOOLEAN! instanceof !BOOLEAN!);
      var _local1 = (((!BOOLEAN! as !BOOLEAN!) + !BOOLEAN!) == this);
      if (!(!BOOEAN! == !BOOLEAN!)){
        -((true << !BOOLEAN!)).push(Cell(cells[_local5][_local6]));
      }
    }
    if (!true){
      (_local6 < 1);
      (_local6 < 1);
      (_local5 < 1);
    }
  }
return (_local6);
}

использованная литература

внешние ссылки