Направо към съдържанието

ActionScript

от Уикипедия, свободната енциклопедия
ActionScript
.
Информация
АвторГари Гросман
РазработчикMacromedia (сега към Adobe Systems)
Последна версия3.0
27 юни 2006
Уебсайтwww.adobe.com/devnet/actionscript.html

ActionScript е ECMAScript базиран програмен език, използван за писане на Flash филмчета и приложения. Тъй като и ActionScript и JavaScript са базирани на един и същ ECMAScript синтаксис, теоретично е лесно превеждането от един на друг. Но докато за JavaScript's DOM (Document Object Model) обект са прозорецът на браузъра, отделният документ и форматът, за ActionScript това е SWF (Small Web Format), който може да включва анимация, звук, текст и др. Скриптовият език е начин за комуникация с програмата, при който може да се укаже на Flash какво да направи или да се получи информация какво става, докато филмът върви. Този двустранен вид комуникация позволява да се създават интерактивни филми.

ActionScript се появява с текущия синтаксис с излизането на Flash 5, който е първата напълно програмно ориентирана версия на Flash. Тази версия на ActionScript е именувана ActionScript 1.0. Във Flash 6 (MX) е разширен с помощна среда за програмиране с добавяне на вградени функции и подобрен програмен контрол на елементите във файла. Flash 7 (MX 2004) представя ActionScript 2.0, към който е добавено стриктното типизиране и класово ориентирано програмиране особености като изрична декларация клас, онаследяване, интерфейси. ActionScript 1.0 и 2.0 имат един и същ изходен компилиран формат – SWF (Shock Wave File).

  • Flash Player 2: Първата версия с поддръжка на скриптове, включващи gotoAndPlay, gotoAndStop, nextFrame и nextScene за контрол на времевата линия и сцените.
  • Flash Player 3: Разширява основната функционалност с възможността да се зареждат външни SWF файлове с loadMovie.
  • Flash Player 4: Първия плеър с пълна поддръжка на скриптове, наричани Actions. Скриптовете са били със slash базиран синтаксис и е имало поддръжка на цикли, условности, промениливи и други основни конструкции.
  • Flash Player 5: Включва първата версия на същинския ActionScript. Въведени са програмиране с прототипи базирано на ECMAScript, въведени са Процедурното и Обектно ориентираното програмиране.
  • Flash Player 6: Добавена е поддръжка на събития.
  • Flash Player 7: Flash Player 7 предлага някои нови възможности като CSS форматиран текст и подобрения в бързодействието. Macromedia Flash 7 компилаторът поддържа ActionScript 2.0, Класово ориентиран програмен език базиран на ECMAScript 4 Netscape Proposal. Допълнително ActionScript 2.0 може да прекомпилира до ActionScript 1.0 в байт код, така че да може да се изпълни във Flash Player 6.
  • Flash Player 8: Допълнително разширен ActionScript 2.0 с добавянето на нови библиотеки с класове с функции за контролиране на bitmap изображения при изпълнение на кода.
  • Flash Player 9 (първоначално наречен 8.5): Добавен е ActionScript 3.0 заедно с появяването на нова виртуална машина, наречена AVM2 (ActionScript Virtual Machine 2), която съществува едновременно с предишната AVM1 необходима за поддръжката на старите кодове. Подобрения в бързодействието е значително в тази версия включваща новата JIT компилация. Това е първата версия на плеъра, наричан Adobe Flash Player.
  • Flash Lite 1.0 and 1.1: Flash Lite е Flash технология, специално разработена за мобилни телефони и електронни устройства. Flash Lite 1.1 поддържа Flash 4 ActionScript.
  • Flash Lite 2.1: Добавена е поддръжка на Flash 7 ActionScript 2.0.

В ActionScript 2.0 може да има класове, както и елементи от библиотеката (MovieClip) могат да бъдат свързани с класа. Класовете винаги се пишат във външни текстови файлове, и тези фалйове са с разширение .as. Класовете са допълнения към езика ActionScript, които програмиста може сам да напише, въпреки че има много готови класове като MovieClip класа, който може да бъде използван за рисуване на вектори динамично. Класовете улесняват програмиста и файловете с класовете могат да бъдат използвани в много проекти, ако е необходимо.

Възможности на Flash ActionScript, които JavaScript програмистите могат да намерят за интересни:

  • Всичко е с презумцията да бъде асинхронно;
  • Flash 5 може да изпраща и приема XML, което може да бъде използвано за направата на онлайн игри.

ActionScript кодът често се пише директно във Flash средата за разработка, която предлага връзка, подсказки и оцветяване. Често, кодът се запазва с останалите елементи в .fla файл. Практика е и импортването на външни ActionScript кодове от външни файлове, чрез include. В този случай външния файл може да бъде компилиран с вградения за Flash компилатор IDE или с Motion Twin ActionScript2 Compiler (MTASC).

ActionScript 3.0 има сходен синтаксис с този на предходната версия, но използва различен набор от API за създаване на обекти.

Сравнение между двете версии на програмния език:

Версия 2.0:

class com.example.Greeter extends MovieClip

{
    public function Greeter()
    {
        var txtHello:TextField = this.createTextField(„txtHello“, 0, 0, 0, 100, 100);
        txtHello.text = „Hello, world“;
    }

}

Версия 3.0:

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

}

ActionScript 3.0 също може да се използва в MXML, когато се използва Apache's Flex framework.

Структура на данните

[редактиране | редактиране на кода]

ActionScript основно се състои от „фундаментални“ или „прости“ видове, които се използват за създаване на други типове данни. Тези типове данни са много сходни с типове Java данни. Тъй ActionScript 3 е напълно пренаписан спрямо ActionScript 2, типовете данни и техните наследствата са се променили.

  • String – Ред от символи (може да е само един знак, дума, изречение). Пример: „Здравей, свят“;
  • Number – Всяка числена стойност;
  • Boolean – Просто бинарно (двоично) хранилище, което може да съхранява само „вярно“ или „грешно“.
  • Object – Обектът може да съчетае всички останали видове данни. Позволява да се групират методи, функции, параметри и други обекти.

Има допълнителни „сложни“ типове данни. Това са интензивни задачи за процесора и паметта и се състоят от много „прости“ типове данни. За AS2, някои от тези типове данни са:

  • MovieClip – Творение на ActionScript, позволяващо лесно използване на видими обекти;
  • TextField – Може да бъде обикновено, динамично или въвеждащо. Наследява MovieClip;
  • Button – Бутон, с 4 състояния (поведения): Мишка не задържана на него, мишка на него, Мишка натисната на него и мишка задържана на него. Наследява MovieClip;
  • Date – Дава достъп до информация в определено време;
  • Array – Позволява да се съхранява поредност от информация;
  • XML – XML обект
  • XMLNode – XML връзка
  • LoadVars
  • Sound
  • NetStream
  • NetConnection
  • MovieClipLoader
  • EventListener.
  • Boolean – Булевата стойност позволява да се съдържа само 1 (вярно) или 0 (грешно). Няма други валидни стойности;
  • int – 32-бирова целочислена стойност. Може да приема всичко между -2,147,483,648 и 2,147,483,647;
  • Null – Съдържа само една стойност – null. Стандартна стойност за низовите данни и обектите;
  • Number – Числото може да представя целочислени, положителни целочислени и числа с плаваща запетая. Number използва 64-bit формат с довйна прецизност по IEEE Стандарт за бинарни числа с плаваща прецизност (IEEE-754). Стойности между -9,007,199,254,740,992 (-253) и 9,007,199,254,740,992 (253) могат да се съхраняват.
  • String – Представя последователност от 16-bit символи. низовете се съхраняват като последователност от символи, използвайки формат UTF-16. Предишната версия на Флаш използва UTF-8 формат.
  • uint – Положителният целочислен формат (Unsigned Integer) използва 32-bit положителни целочислени числа между 0 и 4,294,967,295.
  • void – Типът void съдържа само една стойност – undefined (недефинирана). В миналите версии на ActionScript, undefined е подразбиращата се стойност на Обект класа. В ActionScript 3.0, подразбиращата се стойност на Обект класа е null.
  • Array – Съдържа масив от данни.
  • Date – Обект, съдържаща дата (време).
  • Error – Генерална грешка, която програмата връща.
  • flash.display:Bitmap – Неанимиран битмап обект
  • flash.display:MovieClip – Анимиран MovieClip обект; Времената линия на Флаш подразбиране е MovieClip.
  • flash.display:Shape – Неанимирана фигура.
  • flash.display:SimpleButton – Обикновен бутон, поддържащ „up“, „over“ и „down“ състояния.
  • flash.display:Sprite – Показен обект, без времева линия.
  • flash.media:Video – Директно възпроизвеждане на видео, поддържащ теглене в реално време (progressive download) или стийминг (RTMP) транпорт. От Flash Player версия 9.0.115.0, се поддържа H.264/MP4 висококачествен видео формат, поддържа се и стандарт Flash video (FLV).
  • flash.text:TextField – Динамично, опционално текстово поле.
  • flash.utils:ByteArray -Съдържа ред от бинарни данни.
  • flash.utils:Dictionary – Речниците са варианти на Обектите, които могат да съдържат всякакви данни (докато Object винаги използва низове като негов ключ).
  • Function – Ключов клас в дефинирането на методи
  • Object – Дефинира се от Object класа.
  • RegExp – Regular expression обект за низове.
  • Vector – Варант на Array, който се поддържа в Flash Player 10 или нагоре.
  • XML
  • XMLList

Както при всички сериозни програмни езици, които се нуждаят от компилиране, като Flash и Microsoft .NET, след като един SWF файл е записан, то той може да бъде декомпилиран до началния му изходен код. Някои декомпилатори са способни на почти пълна реконструкция на оригиналния код, който е бил написан по време на създаването (въпреки че крайните резултати варират във всеки отделен случай). За да се предотврати декомпилацията, Adobe въвеждат обфускация, която кара декомпилатора да не може да изпълни функцията си. Код преди обфускация:

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][0]);
    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 = -(((null – !NULL!) % ~(undefined)));
  var _local4:*;
  var _local5:*;
  var _local6:*;
  _local3 = new Array();
  _local4 = 0;
  for (;//unresolved jump
  , _arg2 < 8;_local4++) {
    _local5 = (_arg1 + int(!NULL!));
    _local6 = (_arg2 + int(!NULL!));
    if (true){
      _arg1 = (((//unresolved nextvalue or nextname << !NULL!) + !NULL!)
<< undefined);
      _arg1 = (!(!NULL!) ^ !NULL!);
      (!NULL! instanceof !NULL!);
      var _local1 = (((!NULL! as !NULL!) + !NULL!) == this);
      if (!(!NULL! == !NULL!)){
        -((true << !NULL!)).push(Cell(cells[_local5][_local6]));
      }
    }
    if (!true){
      (_local6 < 0);
      (_local6 < 0);
      (_local5 < 0);
    }
  }
return (_local3);
}