ActionScript

Programmiersprache
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 3. Juli 2008 um 01:23 Uhr durch 84.74.149.50 (Diskussion) (Weblinks). Sie kann sich erheblich von der aktuellen Version unterscheiden.

ActionScript (kurz: AS) ist eine Programmiersprache des US-amerikanischen Softwareunternehmens Adobe Systems auf Basis des ECMAScript-Standards (ECMA-262) und dient zur Erstellung von Flash-Script-Anwendungen. Die Sprache wurde ursprünglich von Macromedia entwickelt, die im Dezember 2005 von Adobe Systems übernommen wurde.

Während Flash selbst anfangs zur Darstellung von Medieninhalten, wie Animationen und Filmen, diente, kam mit ActionScript die Möglichkeit interaktiver Anwendungen und Datenverarbeitung hinzu.

Funktion

Entwicklungsseitig ist die Sprache Teil der integrierten Entwicklungsumgebung (IDE) Adobe Flash, die sowohl Scriptentwicklung als auch deren Debuggen unterstützt. Anwendungsseitig wird sie vom Flash-Player, eigenständig oder als Browser-Plugin, beim Abspielen eines Flash-Scripts interpretiert. Laut einer Statistik von Macromedia verfügen über 97 % [1] aller Browser über ein Flash-Player-Plugin.

Mittlerweile gibt es auch eine Reihe kommerzieller sowie Open-Source-Werkzeuge von Drittherstellern, die es ebenfalls ermöglichen, Flash-Filme zu erzeugen; ein Beispiel im Open-Source-Bereich ist PHP Ming.

ActionScripts arbeiten stets ereignisorientiert. Sie werden also nur nach einem eingetretenem Ereignis ausgeführt. Dazu gehören etwa:

  • Schlüsselbilder – sobald der Player ein bestimmtes Schlüsselbild abspielt
  • Schaltflächen-Symbole – der Nutzer fährt mit der Maus über eine Schaltfläche oder klickt diese an
  • MovieClip-Symbole – eingebettete MovieClips lösen selbst Ereignisse aus
  • Interval-Impulse - Gestartete Intervalle (mit IRQs zu vergleichen) lösen den Aufruf aus

Konventionen/Syntax

ActionScript

Da ActionScript sowie auch JavaScript auf dem ECMAScript-Standard aufbaut, bestehen Ähnlichkeiten in der Syntax zwischen den beiden Sprachen. Trotzdem unterscheiden sich beide jedoch grundlegend: Während JavaScript hauptsächlich aus dem Browser-Umfeld bekannt ist und dort mit Fenster-, Dokument- und Formular-Objekten arbeitet, arbeitet ActionScript mit MovieClips, Textfeldern und Klängen.

ActionScript-1-Syntax
// Konstruktor-Funktion (in ActionScript 1.0 eine Art Klassenersatz)
function SportTreiben ()
{
 trace ("ich treibe Sport");
 this.aufwaermen ();
}

SportTreiben.prototype.aufwaermen = function ()
{
 trace ("ich wärme mich jetzt auf, mit " + this.addiere (1, 5) + " Liegestuetzen");
};

SportTreiben.prototype.trainiereGolf = function ()
{
 trace ("ich trainiere jetzt Golf");
};

SportTreiben.prototype.addiere = function (a1, a2)
{
 return a1 + a2;
};
// Ausführen
var sport = new SportTreiben ();
/* 
* Ausgabe im Ausgabefenster:
* ich treibe Sport
* ich wärme mich jetzt auf, mit 6 Liegestuetzen 
*/

sport.trainiereGolf ();
/* 
* Ausgabe im Ausgabefenster:
* ich trainiere jetzt Golf 
*/

ActionScript 2

Mit ActionScript 2 (AS2) gibt es seit Flash MX 2004 eine Java-ähnliche Programmiersprache, die sich an einem Entwurf für ECMAScript 4 [2] orientiert. AS2 wird ab der Flash-Player-Version 6.0.65.0 unterstützt.

Der Unterschied der beiden Skriptversionen liegt vor allem darin, dass AS2 ausschließlich in externen Dateien beschränkt ist, die von Flash automatisch erkannt werden. Innerhalb dieser ActionScript-Dateien darf jeweils nur eine Klasse definiert werden. Eine Mehrfach-Vererbung oder die Bildung von abstrakten Klassen ist in ActionScript 2.0 nicht möglich.

ActionScript-2-Syntax
// Adressierung der Klasse
import tld.domain.projekt.*;
class SportTreiben
{
   function SportTreiben()
   {
      trace("ich treibe Sport");
      // ein Aufruf einer internen Funktion
      aufwaermen();
   }

   // ein Aufruf der nur innerhalb der Klasse gilt wird mit "private" gekennzeichnet
   private function aufwaermen():Void
   {
      trace("ich wärme mich jetzt auf, mit " + addiere (1, 5) + " Liegestuetzen");
   }

   // ein Aufruf der auch von außerhalb erfolgen kann, wird mit "public" gekennzeichnet
   // Methoden ohne Rückgabewert sind vom Typ Void, auch leer bezeichnet
   public function trainiereGolf():Void
   {
      trace("ich trainiere jetzt Golf");
   }

   // Parametertypen werden mittels : vom Parameternamen getrennt
   // der Rückgabetypus der Methode wird hinter der ) Klammer, ebenfalls nach einem : definiert
   private function addiere (a1:Number, a2:Number):Number
   {
       // der Rückgabewert vom Typ Number wird mittels return übergeben
       return a1 + a2;
   }
}
Anwendung in der *.fla-Datei
// Importieren der Klasse
var sport:SportTreiben = new SportTreiben();

/* 
* Ausgabe im Ausgabefenster:
* ich treibe Sport
* ich wärme mich jetzt auf, mit 6 Liegestuetzen 
*/

sport.trainiereGolf();

/* 
* Ausgabe im Ausgabefenster:
* ich trainiere jetzt Golf 
*/

ActionScript 3

ActionScript 3.0 (kurz AS 3.0) ist eine objektorientierte Programmiersprache, die Verfahren für die Erstellung von Rich Internet Applications implementiert. Bereits frühere Versionen von ActionScript umfassten die nötige Funktionalität und Flexibilität für interaktive Web-Anwendungen. ActionScript 3.0 bietet zahlreiche Verbesserungen, darunter eine optimierte Performance und einen erweiterten Funktionsumfang, welcher die Programmierung hoch komplexer Anwendungen, größerer Datensatzgruppen und objektorientierter, wieder verwendbarer Standard-Code-Elemente vereinfachen soll. Die Skriptsprache beruht auf dem internationalen Standard ECMAScript und ist mit der Spezifikation für ECMAScript konform. Auf dieser Spezifikation aufbauend wurde, zur besseren XML-Verarbeitung, ECMAScript for XML (E4X) implementiert.

Zusätzlich wurde die grundlegend neue und überarbeitete, ActionScript Virtual Machine (kurz AVM2) eingeführt, die die Leistungsfähigkeit der Vorgängerversion AVM1 übertrifft. Code in ActionScript 3.0 wird bis zu zehn Mal schneller ausgeführt als in einer älteren Version.

Die neue AVM2 ist seit Flash Player 9 enthalten und wird als primäre Virtual Machine bei der Ausführung von ActionScript-Code eingesetzt. Auf Grund der Abwärtskompatibilität zu bestehenden Inhalten unterstützt der Flash Player weiterhin auch die bisher verwendete AVM1.

Neben der Verwendung in Adobe Flash kommt ActionScript ebenfalls in den Produkten Adobe Flex und Adobe AIR zum Einsatz.

--

Anwendung in der *.fla-Datei
var sport:SportTreiben = new SportTreiben();

/* 
* Ausgabe im Ausgabefenster:
* ich treibe Sport
* ich wärme mich jetzt auf, mit 6 Liegestuetzen 
*/

sport.trainiereGolf();

/* 
* Ausgabe im Ausgabefenster:
* ich trainiere jetzt Golf 
*/
ActionScript-3-Syntax (Klassenerweiterung)
package {
    import flash.events.MouseEvent;
    import flash.display.MovieClip;
    public class Kugel extends MovieClip {
         public function Kugel() {
             trace("Kugel erzeugt: " + this.name);
             this.buttonMode = true;
             this.addEventListener(MouseEvent.CLICK, clickListener);
             this.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownListener);
             this.addEventListener(MouseEvent.MOUSE_UP, mouseUpListener);
         }
         private function clickListener(event:MouseEvent):void {
             trace("Sie haben die Kugel angeklickt!");
         }
         public function mouseDownListener(event:MouseEvent):void {
             event.target.startDrag();
         }
         public function mouseUpListener(event:MouseEvent):void {
             event.target.stopDrag();
         }
    }
}
Anwendung in der *.fla-Datei
var kugel1:Kugel = new Kugel();
addChild(kugel1);

Schreibweise

Funktionsnamen und Variablen sollten mit einem kleinen Buchstaben beginnen. Klassen sollten großgeschrieben werden. Der erste Buchstabe jedes Teilwortes sollte in beiden Fällen großgeschrieben werden.

Beispiele:

  • Klassen: ProductInformation, MovieController
  • Variablen: userName, myHtml, rawXml

Anmerkung: Objekte (Instanzen) sind die Exemplare der Klassen. In diesem Fall ist etwa der Wert der Variablen rawXml ein Objekt der Klasse XML. siehe Instanzierung

Textvervollständigung

  • Der ActionScript-Editor unterstützt Textvervollständigung – dies aber nur, wenn sich die Namen an ein bestimmtes Format halten:
  • Durch die in AS 2.0 nötig gewordene Typisierung, kann auf die Suffixe verzichtet werden, da der AS-Editor die typisierten Namen interpretieren kann.
Unterstützte Suffixe für die Textvervollständigung
Objekt-Typ Suffix Beispiel
Array _array meinArray_array
Button _btn meinButton_btn
Camera _cam meineCamera_cam
Color _color meinColor_color
ContextMenu _cm meinContextMenu_cm
ContextMenuItem _cmi meinContextMenuItem_cmi
Date _date meinDate_date
Error _err meinError_err
LoadVars _lv meineVar_lv
LoadConnection _lc meinConnection_lc
Microphone _mic meinMicro_mic
MovieClip _mc meinMovieClip_mc
MovieClipLoader _mcl meinLoader_mcl
PrintJob _pj meinPrint_pj
NetConnection _nc meinConnection_nc
NetStream _ns meinStream_ns
SharedObject _so meinObject_so
Sound _sound meinSound_sound
String _str meinString_str
TextField _txt meinTextField_txt
TextFormat _fmt meinFormat_fmt
Video _video meinVideo_video
XML _xml meinXML_xml
XMLNode _xmlnode meinNode_xmlnode
XMLSocket _xmlsocket meinSocket_xmlsocket

Kommentare

Schon während der Entwicklung werden meist Kommentare in den Code eingefügt, der die Funktionsweise beschreibt. Einem außenstehenden Entwickler soll damit ermöglicht werden, sich mithilfe der Kommentare schnell einzuarbeiten und den Code weiterzuentwickeln.

var clicks:Number = 0;      // Dies ist ein einzeiliger Kommentar.
/*
 * Dies ist ein Kommentar,
 * der sich über mehrere Zeilen erstreckt.
 *
 */

Zugriff auf Variablen

this._parent.myVar.blah = 100;  // Benutzen Sie relative Bezeichnungen wie diesen
_root.myClip = 200;        // Vermeiden Sie absolute Bezeichner wie diesen
_global.myVar = 300;       // _global-Variablen sind in allen Movies im Player verfügbar

Actions

Gängiges Vorgehen erfahrener Programmierer:

  • Meist wird der Code an einer Stelle zusammengehalten – vorzugsweise im Frame 1 der Zeitleiste. Dies erleichtert dem Programmierer das spätere Debugging. Sollte ein Preloader verwendet werden, kann es dagegen notwendig sein, den Code erst in Frame 2 zu platzieren, da Flash oft Probleme hat den Code im ersten Frame rechtzeitig und korrekt auszuführen.
  • Große Code-Blöcke werden mit Kommentaren in logische Teile unterteilt.
  • Code wird nicht an MovieClips oder Buttons gebunden – hier stehen vielmehr nur Funktionsaufrufe. Die Funktionen als solche werden in einen Frame oder in eine ActionScript-Klasse (*.as-Datei) geschrieben.
// CODE IM BUTTON – nicht empfohlen
on (release) {
    play();
}
// CODE IM FRAME – Empfehlung
// (der Buttoninstanz muss dazu ein Instanzname gegeben werden
// hier also: myButton_btn)
myButton_btn.onRelease = function() {
    play();
}

Gängige Tools zur Programmierung in Actionscript sind neben dem eingebautem spartanischem Actionscript-Editor die Programme / Frameworks Eclipse und Flash.

Quellen

Die oben genannten Informationen stellen eine Zusammenfassung dieses Artikels dar:

  1. (Verbreitungsstatistik)
  2. ECMAScript 4 - http://www.mozilla.org/js/language/es4/

Literatur

Siehe auch