ActionScript

Z Wikipedii, wolnej encyklopedii
Skocz do: nawigacja, szukaj

ActionScript – oparty na ECMAScripcie obiektowy język programowania, używany w Adobe Flash do sterowania animacjami oraz w Adobe Flex do tworzenia Rich Internet Application.

Historia[edytuj | edytuj kod]

ActionScript z obecnie stosowaną składnią pojawił się po raz pierwszy we Flashu 5, który w pełni umożliwiał programowanie we Flashu. Ta wersja ActionScriptu została nazwana ActionScript 1.0. Flash 6 (MX) dalej rozszerzył użyteczność środowiska programistycznego przez dodanie wielu wbudowanych funkcji i lepszą programistyczną kontrolę nad klipami. Flash 7 (MX 2004) wprowadził wersję ActionScript 2.0, która dodała takie funkcjonalności i cechy obiektowe jak: typowanie sztywne (ang. strong typing), jawne deklaracje klas (ang. explicit class declarations), dziedziczenie, interfejsy, ścisłe typowanie danych (ang. Strict Data Typing).

  • Flash Player 2: pierwsza wersja z obsługą skryptów (m.in. gotoAndPlay, gotoAndStop, nextFrame i nextScene)
  • Flash Player 3: rozszerzone możliwości języka skryptowego z funkcją ładowania zewnętrznych plików SWF (loadMovie)
  • Flash Player 4: pierwszy Flash Player z pełną implementacją skryptów (pod nazwą Actions). Język skryptowy miał składnię w oparciu o ukośniki (ang. a slash based syntax) i obsługiwał pętle, konstrukcje warunkowe, zmienne i inne podstawowe cechy języków programowania
  • Flash Player 5: zawierał pierwszą wersję właściwego ActionScriptu, dialektu języka skryptowego ECMAScript, umożliwiał w pełni programowanie z użyciem paradygmatu proceduralnego i obiektowego
  • Flash Player 6: dodał między innymi model sterowania zdarzeniami i konstrukcję switch
  • Flash Player 7: pojawiły się nowe funkcje takie jak CSS text i usprawnienia wydajności. Kompilatory Adobe Flash wydane z Flash Player 7 obsługują ActionScript 2.0, jednak ActionScript 2.0 można kompilować skrośnie do ActionScript 1.0 byte-code, więc można go odtwarzać w Flash Player 6
  • Flash Player 8: Dalsze udoskonalenia ActionScript 2.0 przez dodanie nowych bibliotek klas z API for control bitmap data at run-time i umożliwienie ładowania plików (upload)
  • Flash Player 9 (wstępnie nazywany 8.5): wprowadzenie ActionScript 3.0 z nową maszyna wirtualną AVM2 (ActionScript Virtual Machine 2), która jest zgodna z poprzednią AVM1, dla zachowania zgodności ze skryptami z poprzednich wersji. Ważnym celem dla tej wersji Flash Playera było również usprawnienie wydajności.

W ActionScriptcie 2.0, dodano funkcje obiektowe, takie jak deklaracje klas, dziedziczenie, hermetyzacja.

Kod ActionScript jest zwykle pisany w środowisku programistycznym Flasha, które oferuje dynamiczną pomoc i podświetlanie składni. Kod jest zapisywany razem z animacją, w pliku .fla. Nierzadko stosuje się też import kodu z plików tekstowych, za pomocą polecenia #include. Zwyczajowo pliki takie mają rozszerzenie .as, choć nie jest to powszechnie przyjęta konwencja.

W ActionScriptcie 2.0 mogą istnieć klasy, a pozycje należące do biblioteki (klipy) mogą być wiązane z klasą. Klasy są zawsze pisane w zewnętrznych plikach tekstowych o rozszerzeniu .as. Do czasu wydania Flash 8 kompilator był znany ze swojej powolności – kompilacja 100 klas mogła zająć nawet kilka minut. Obecnie problem ten już nie występuje.

Przykłady[edytuj | edytuj kod]

Oto przykład skryptu wyświetlający tekst „Witaj świecie!” w oknie debugera:

trace("Witaj świecie!");

Następny przykład przypisany obiektowi MovieClip wewnątrz aplikacji Flash po jego załadowaniu ustawia jego przezroczystość na 70%, a następnie w każdej klatce filmu przesuwa jego położenie względem osi x o 2 piksele. Kod w wersji ActionScript 2.0:

onClipEvent(load){
   this._alpha = 70;
}
onClipEvent(enterFrame){
   this._x += 2;
}

Ten sam kod dla obiektu MovieClip o nazwie movie_mc, napisany w ActionScript 3.0 będzie wyglądał tak:

movie_mc.alpha = .7;
movie_mc.addEventListener(Event.ENTER_FRAME, moveIt);
function moveIt(e:Event):void{
  movie_mc.x = movie_mc.x + 2;
}

Wynika to z dużej obiektowości programowania w tym języku.

ActionScript 3.0[edytuj | edytuj kod]

Jest to najnowsza wersja języka programowania aplikacji Flash. Firma Adobe postawiła w tym przypadku na szybkość i wydajność, optymalizując do granic możliwości nową wersję tego języka. Co za tym idzie, wprowadzono nowe restrykcje, dotyczące głównie deklaracji zmiennych czy funkcji, przerzucono niemal wszystkie zdarzenia na tzw. obiekty nasłuchujące (EventListener), które w nowym wydaniu ActionScript nie są obiektami, ale funkcjami. Poniżej krótkie zestawienie podstawowych różnic pomiędzy AS2.0 oraz AS3.0.

//w AS2.0 niekonieczna jest deklaracja, jaki typ danych przechowuje zmienna:
var zmienna = "tutaj jestem łańcuchem tekstowym";
zmienna = 5; //tutaj już liczbą int
zmienna = -2.561; //tutaj liczbą float

//w AS3.0 deklaracja musi się odbyć ze ścisłym określeniem typu danych:
var zmienna:String = "łańcuch znaków";
// zmienna = 5;  -  wywoła błąd!

dzięki takim deklaracjom kod jest o wiele bardziej wydajny bo FlashPlayer "wie" czego się spodziewać po określonych obszarach pamięci. Duże zmiany są także w odbieraniu zdarzeń. I znów porównanie:

/* Na scenie mamy umieszczony przycisk o nazwie przycisk_mc. 
Jednak przechwycenie jego kliknięcia odbiera się inaczej w AS2 i AS3*/

//AS2.0:
przycisk_mc.onRelease = function(){
   trace("Przycisk kliknięty");
}

//AS3.0:
przycisk_mc.addEventListener(MouseEvent.CLICK, przyciskKlikniety);
function przyciskKlikniety(event:Event):void{
   trace("Przycisk kliknięty");
}

Obie te funkcje wykonują to samo. Warto jednak zwrócić uwagę na bardzo precyzyjne określenie typu parametrów przyjmowanych do funkcji w AS3.0 (jest to jeden parametr event typu Event) oraz wartości przez nią zwracanych (w tym przypadku void – funkcja nie zwraca nic, przez co FlashPlayer nie oczekuje na rezultat). Takie restrykcje zdecydowanie przyspieszają działanie naszego filmu. Nawet jeżeli zmiany nie są widoczne przy jednym kliknięciu przycisku na scenie, to gdy funkcja taka jest wywoływana kilka tysięcy razy w pętli, różnicę zdecydowanie da się dostrzec.

Zobacz też[edytuj | edytuj kod]

Linki zewnętrzne[edytuj | edytuj kod]