Arbeiten mit Objekten

ActionScript ist eine objektorientierte Programmiersprache. Bei der objektorientierten Programmierung handelt es sich um eine Programmiermethode. Dabei wird der Code eines Programms mithilfe von Objekten organisiert.

Wir haben den Begriff „Computerprogramm“ bereits als Folge von Schritten oder Anweisungen definiert, die vom Computer ausgeführt werden. Analog können Sie sich ein Computerprogramm vereinfacht als eine lange Liste mit Befehlen vorstellen. Bei der objektorientierten Programmierung sind die Programmanweisungen aber in verschiedene Objekte unterteilt. Der Code wird in Funktionalitätsblöcke gruppiert, das heißt, zugehörige Funktionalitätstypen oder Informationseinheiten sind in einem Container gruppiert.

Adobe Flash Professional

Wenn Sie bereits mit Symbolen in Flash Professional gearbeitet haben, ist Ihnen das Konzept der Objekte bereits vertraut. Angenommen, Sie haben ein Movieclip-Symbol definiert, beispielsweise die Zeichnung eines Rechtecks, und eine Kopie davon auf der Bühne platziert. Dieses Movieclip-Symbol ist auch ein Objekt in ActionScript, eine Instanz der MovieClip-Klasse.

Ein Movieclip weist verschiedene Eigenschaften auf, die Sie ändern können. Wenn der Movieclip ausgewählt ist, können Sie Werte im Eigenschafteninspektor ändern, wie die x-Koordinate oder die Breite. Außerdem können Sie die Farbe auf verschiedene Weise anpassen, indem Sie beispielsweise den Alphawert (die Transparenz) ändern oder einen Filter für Schlagschatten anwenden. Andere Werkzeuge in Flash Professional ermöglichen Ihnen weitere Änderungen; so können Sie das Rechteck mit dem Werkzeug für die freie Transformation beispielsweise drehen. Alle diese Methoden zum Ändern eines Movieclip-Symbols in Flash Professional sind auch in ActionScript verfügbar. Sie ändern den Movieclip in ActionScript, indem Sie die Dateneinheiten ändern, die zentral in einem sogenannten MovieClip-Objekt kombiniert werden.

Bei der objektorientierten Programmierung in ActionScript weist jede Klasse drei Merkmale auf:

  • Eigenschaften

  • Methoden

  • Ereignisse

Diese Merkmale dienen zum Verwalten der vom Programm verwendeten Datenteile und zur Entscheidung, welche Aktionen in welcher Reihenfolge ausgeführt werden.

Eigenschaften

Eine Eigenschaft stellt einen der Datenteile dar, der mit anderen Datenteilen zu einem Objekt zusammengefasst wird. Beispiel: Ein Song-Objekt kann Eigenschaften namens artist und title aufweisen; die MovieClip-Klasse enthält Eigenschaften wie rotation, x, width und alpha. Sie arbeiten mit Eigenschaften wie mit einzelnen Variablen. Genau genommen lassen sich Eigenschaften mit den „untergeordneten“ Variablen vergleichen, die in einem Objekt enthalten sind.

Im Folgenden sind einige ActionScript-Codebeispiele aufgeführt, in denen Eigenschaften verwendet werden: Mit dieser Codezeile wird der Movieclip namens square zur x-Koordinate 100 Pixel verschoben:

square.x = 100;

Im folgenden Code wird die rotation-Eigenschaft verwendet, um den MovieClip square so zu drehen, dass er der Drehung des MovieClips triangle entspricht:

square.rotation = triangle.rotation;

Im folgenden Code wird der horizontale Maßstab des MovieClips square so geändert, dass er anderthalb Mal breiter als zuvor ist:

square.scaleX = 1.5;

Beachten Sie die allgemeine Syntax: Sie verwenden eine Variable (square, triangle) als Namen des Objekts, gefolgt von einem Punkt (.) und dem Namen der Eigenschaft (x, rotation, scaleX). Der Punkt (auch als Punktoperator bezeichnet) kennzeichnet, dass Sie auf eines der untergeordneten Elemente des Objekts zugreifen. Die gesamte Struktur, „Variablenname-Punkt-Eigenschaftenname“, wird wie eine einzelne Variable als Name für einen Wert im Speicher des Computers verwendet.

Methoden

Eine Methode ist eine Aktion, die ein Objekt ausführen kann. Angenommen, Sie haben in Flash Professional ein Movieclip-Symbol erstellt, dessen Zeitleiste mehrere Schlüsselbilder und Animationen enthält. Dieser Movieclip kann abgespielt, angehalten oder angewiesen werden, den Abspielkopf zu einem bestimmten Bild zu verschieben

Mit dem folgenden Code wird der Movieclip namens shortFilm angewiesen, die Wiedergabe zu starten:

shortFilm.play();

Mit der folgenden Codezeile wird der Movieclip namens shortFilm angehalten (der Abspielkopf hält an, wie das Unterbrechen der Wiedergabe von Video):

shortFilm.stop();

Mit dem folgenden Code werden der Abspielkopf im Movieclip namens shortFilm auf das erste Bild verschoben und die Wiedergabe gestoppt (wie das Zurückspulen eines Video):

shortFilm.gotoAndStop(1);

Der Zugriff auf Methoden erfolgt genauso wie auf Eigenschaften: Sie schreiben den Objektnamen (eine Variable), dann einen Punkt und schließlich den Methodennamen, gefolgt von runden Klammern. Die Klammern geben an, dass Sie die Methode aufrufen, also das Objekt anweisen, die jeweilige Aktion auszuführen. Manchmal werden auch Werte (oder Variablen) in den runden Klammern angegeben. Auf diese Weise werden zusätzliche Informationen übergeben, die zum Ausführen der Aktion erforderlich sind. Diese Werte werden als Parameter der Methode bezeichnet. Beispielsweise muss die gotoAndStop()-Methode wissen, zu welchem Bild sie springen soll, also benötigt sie einen Parameter in den Klammern. Andere Methoden, z. B. play() und stop(), sind selbsterklärend und benötigen keine zusätzlichen Informationen. Trotzdem werden auch diese Methoden mit Klammern angegeben.

Im Gegensatz zu Eigenschaften (und Variablen) werden Methoden nicht als Platzhalter für Werte verwendet. Dennoch können einige Methoden Berechnungen durchführen und ein Ergebnis zurückgeben, das wie eine Variable verwendet werden kann. Beispielsweise wandelt die Methode toString() der Number-Klasse einen numerischen Wert in die entsprechende Textdarstellung um:

var numericData:Number = 9; 
var textData:String = numericData.toString();

Beispielsweise können Sie mit der toString()-Methode den Wert einer Number-Variablen in einem Textfeld auf dem Bildschirm anzeigen. Die text-Eigenschaft der TextField-Klasse wird als String definiert und kann daher nur Textwerte enthalten. (Die text-Eigenschaft repräsentiert den Textinhalt, der auf dem Bildschirm angezeigt wird.) Mit dieser Codezeile wird der numerische Wert in der numericData-Variablen in Text konvertiert. Anschließend wird der konvertierte Wert auf dem Bildschirm im TextField-Objekt namens calculatorDisplay angezeigt:

calculatorDisplay.text = numericData.toString();

Ereignisse

Ein Computerprogramm ist eine Folge von Anweisungen, die der Computer nacheinander ausführt. Einige einfache Computerprogramme bestehen lediglich aus einigen wenigen Schritten, die der Computer ausführt, und dann ist das Programm beendet. ActionScript-Programme hingegen sind so ausgelegt, dass sie immer weiter ausgeführt werden und auf eine Eingabe durch den Benutzer oder andere Ereignisse warten. Ereignisse sind Mechanismen, mit denen festgelegt wird, welche Befehle der Computer zu welchem Zeitpunkt ausführt.

Einfach erklärt sind Ereignisse (Englisch „events“) bestimmte Dinge, die eintreten, ActionScript bekannt sind und eine Reaktion hervorrufen. Viele Ereignisse beziehen sich auf eine Interaktion des Benutzers; beispielsweise klickt der Benutzer auf eine Schaltfläche oder drückt eine Taste auf der Tastatur. Es gibt auch andere Ereignistypen. Angenommen, Sie verwenden ActionScript zum Laden eines externen Bilds. In diesem Fall tritt irgendwann ein Ereignis ein, das Ihnen mitteilt, dass das Bild fertig geladen ist. Während der Ausführung wartet ein ActionScript-Programm genau genommen nur darauf, dass bestimmte Ereignisse auftreten. Sobald diese Ereignisse auftreten, wird der ActionScript-Code, den Sie für die Ereignisse angegeben haben, ausgeführt.

Ereignisverarbeitung

Die Technik zur Angabe von Aktionen, die als Reaktion auf bestimmte Ereignisse ausgeführt werden sollen, wird als Ereignisverarbeitung (Englisch „event handling“) bezeichnet. Wenn Sie einen ActionScript-Code zur Ereignisverarbeitung schreiben, müssen Sie drei wichtige Elemente angeben:

  • Ereignisquelle: An welchem Objekt wird das Ereignis eintreten? Beispiele hierfür sind die Schaltfläche, auf die geklickt wurde, oder das Loader-Objekt, mit dem das Bild geladen wird. Die Ereignisquelle wird auch als Ereignisziel bezeichnet. Dieser Name wird verwendet, da es sich um das Objekt handelt, auf das das Ereignis abzielt (also an dem das Ereignis tatsächlich stattfindet).

  • Ereignis: Was wird eintreten, was soll eine Reaktion hervorrufen? Eine korrekte Angabe des genauen Ereignisses ist besonders wichtig, da viele Objekte mehrere Ereignisse auslösen.

  • Reaktion: Welche Schritte sollen ausgeführt werden, wenn das Ereignis eintritt?

Diese drei Elemente sind immer erforderlich, wenn Sie ActionScript-Code zur Ereignisverarbeitung schreiben. Der Code weist folgende Grundstruktur auf (Elemente in Fettdruck sind Platzhalter, die Sie von Fall zu Fall angeben):

function eventResponse(eventObject:EventType):void 
{ 
    // Actions performed in response to the event go here. 
} 
  
eventSource.addEventListener(EventType.EVENT_NAME, eventResponse);

Dieser Code bewirkt zweierlei. Zunächst definiert er eine Funktion. Auf diese Weise werden die Aktionen festgelegt, die als Reaktion auf das eingetretene Ereignis ausgeführt werden sollen. Anschließend ruft er die addEventListener()-Methode des Quellobjekts auf. Durch den Aufruf von addEventListener() wird die Funktion für das angegebene Ereignis festgelegt. Wenn das Ereignis eintritt, werden die Aktionen der Funktion ausgeführt. Betrachten Sie diese Teile genauer.

Mit einer Funktion können Sie Aktionen unter einem Namen zusammenfassen, der wie ein verkürzter Name zum Ausführen der Aktionen aufgerufen werden kann. Eine Funktion ist weitgehend mit einer Methode identisch, sie ist jedoch nicht unbedingt einer bestimmten Klasse zugeordnet. (Genau genommen ist eine „Methode“ eine Funktion, die einer bestimmten Klasse zugeordnet ist.) Bei der Erstellung einer Funktion für die Ereignisverarbeitung wählen Sie den Namen für die Funktion aus (eventResponse in diesem Fall). Weiterhin geben Sie einen Parameter an (eventObject in diesem Beispiel). Die Angabe eines Funktionsparameters erfolgt wie das Deklarieren einer Variablen, Sie müssen also auch den Datentyp des Parameters angeben. (In diesem Beispiel hat der Parameter den Datentyp EventType.)

Jedem Ereignistyp, auf den Sie warten möchten, ist eine ActionScript-Klasse zugeordnet. Der Datentyp, den Sie für den Funktionsparameter angeben, ist immer die zugeordnete Klasse des jeweiligen Ereignisses, auf das Sie reagieren möchten. Ein click-Ereignis (wird ausgelöst, wenn der Benutzer mit der Maus auf ein Element klickt) ist z. B. der MouseEvent-Klasse zugeordnet. Um eine Listener-Funktion für ein click-Ereignis zu schreiben, definieren Sie die Listener-Funktion mit einem Parameter, der den MouseEvent-Datentyp aufweist. Abschließend geben Sie in geschweiften Klammern ({ ... }) die Anweisungen an, die beim Eintreten des Ereignisses ausgeführt werden sollen.

Die Funktion für die Ereignisverarbeitung wird geschrieben. Im nächsten Schritt instruieren Sie das Ereignisquellobjekt (das Objekt, bei dem das Ereignis eintritt, beispielsweise die Schaltfläche), dass es die Funktion aufrufen soll, wenn das Ereignis eintritt. Sie registrieren die Funktion mit dem Ereignisquellobjekt, indem Sie die addEventListener()-Methode dieses Objekts aufrufen. (Alle Objekte, die Ereignisse enthalten, haben auch eine addEventListener()-Methode.) Die addEventListener()-Methode hat zwei Parameter:

  • Zunächst der Name des Ereignisses, auf das reagiert werden soll. Jedes Ereignis ist einer bestimmten Klasse zugeordnet. Jede Ereignisklasse hat einen besonderen Wert für jedes ihrer Ereignisse. Dieser Wert lässt sich mit einem eindeutigen Namen vergleichen. Sie verwenden diesen Wert für den ersten Parameter.

  • Der zweite Parameter ist der Name der Funktion, die als Reaktion auf das Ereignis ausgeführt wird. Beachten Sie, dass ein Funktionsname ohne runde Klammern geschrieben werden muss, wenn er als ein Parameter übergeben wird.

Der Prozess der Ereignisverarbeitung

Das Folgende ist eine schrittweise Beschreibung des Prozesses, der beim Erstellen eines Ereignis-Listeners ausgeführt wird. In diesem Fall ist es ein Beispiel für das Erstellen einer Listener-Funktion, die aufgerufen wird, wenn auf ein Objekt namens myButton geklickt wird.

Der tatsächliche, vom Programmierer erstellte Code lautet wie folgt:

function eventResponse(event:MouseEvent):void 
{ 
    // Actions performed in response to the event go here. 
} 
 
myButton.addEventListener(MouseEvent.CLICK, eventResponse);

Dieser Code würde folgendermaßen funktionieren, wenn er ausgeführt wird:

  1. Wenn die SWF-Datei geladen wird, erkennt der Computer, dass eine Funktion namens eventResponse() vorhanden ist.

  2. Der Code wird dann ausgeführt (genauer die Codezeilen, die sich nicht in einer Funktion befinden). In diesem Fall ist dies nur eine Codezeile: Aufrufen der addEventListener()-Methode für das Quellobjekt des Ereignisses (mit dem Namen myButton) und Übergeben der eventResponse-Funktion als Parameter.

    Intern verwaltet myButton eine Liste der Funktionen, die auf die einzelnen Ereignisse warten. Wenn die addEventListener()-Methode aufgerufen wird, speichert myButton die eventResponse()-Funktion in der Liste der Ereignis-Listener.

  3. Wenn der Benutzer zu einem beliebigen Zeitpunkt auf das myButton-Objekt klickt, wird das click-Ereignis ausgelöst (im Code als MouseEvent.CLICK gekennzeichnet).

    Zu diesem Zeitpunkt geschieht Folgendes:

    1. Ein Objekt wird erstellt, das eine Instanz der Klasse ist, die dem jeweiligen Ereignis zugeordnet ist (MouseEvent in diesem Beispiel). Bei vielen Ereignissen ist dieses Objekt eine Instanz der Event-Klasse. Bei Mausereignissen handelt es sich um eine MouseEvent-Instanz. Bei anderen Ereignissen ist es eine Instanz der Klasse, die dem Ereignis zugeordnet ist. Das hierbei erstellte Objekt wird als Ereignisobjekt bezeichnet und enthält bestimmte Informationen zum eingetretenen Ereignis: Ereignistyp, Position des Ereignisses und andere ereignisspezifische Informationen (sofern anwendbar).

    2. Der Computer prüft dann die Liste der Ereignis-Listener, die von myButton gespeichert wurde. Er durchläuft diese Funktionen nacheinander, ruft jede Funktion auf und übergibt das Ereignisobjekt als Parameter an die Funktion. Da die eventResponse()-Funktion einer der Listener von myButton ist, wird die eventResponse()-Funktion als Teil dieses Prozesses aufgerufen.

    3. Beim Aufrufen der eventResponse()-Funktion wird der Code in dieser Funktion ausgeführt; somit werden die von Ihnen angegebenen Aktionen ausgeführt.

Beispiele für die Ereignisverarbeitung

Im Folgenden werden weitere konkrete Beispiele für Code zur Ereignisverarbeitung gezeigt. Diese Beispiele zeigen Ihnen einige übliche Ereigniselemente sowie mögliche Variationen, die beim Schreiben von Code zur Ereignisverarbeitung verfügbar sind:

  • Klicken auf eine Schaltfläche zum Starten der Wiedergabe des aktuellen Movieclips. Im folgenden Beispiel ist playButton der Instanzname der Schaltfläche und this bezieht sich auf das aktuelle Objekt:

    this.stop(); 
     
    function playMovie(event:MouseEvent):void 
    { 
        this.play(); 
    } 
     
    playButton.addEventListener(MouseEvent.CLICK, playMovie);
  • Erfassen einer Eingabe in einem Textfeld. Im folgenden Beispiel ist entryText ein Eingabetextfeld und outputText ein dynamisches Textfeld:

    function updateOutput(event:TextEvent):void 
    { 
        var pressedKey:String = event.text; 
        outputText.text = "You typed: " + pressedKey; 
    } 
     
    entryText.addEventListener(TextEvent.TEXT_INPUT, updateOutput);
  • Klicken auf eine Schaltfläche zur Navigation zu einer URL. In diesem Fall ist linkButton der Instanzname der Schaltfläche:

    function gotoAdobeSite(event:MouseEvent):void 
    { 
        var adobeURL:URLRequest = new URLRequest("http://www.adobe.com/"); 
        navigateToURL(adobeURL); 
    } 
     
    linkButton.addEventListener(MouseEvent.CLICK, gotoAdobeSite);

Erstellen von Objektinstanzen

Bevor Sie ein Objekt in ActionScript verwenden können, muss es zunächst einmal existieren. Ein Teil beim Erstellen eines Objekts ist das Deklarieren einer Variablen, jedoch wird hierbei lediglich ein leerer Bereich im Speicher des Computers erstellt. Bevor Sie eine Variable verwenden oder ändern, müssen Sie ihr immer einen Wert zuweisen (ein Objekt erstellen und in der Variablen speichern). Die Erstellung eines Objekts wird als Instanziieren des Objekts bezeichnet. Anders ausgedrückt: Sie erstellen eine Instanz einer bestimmten Klasse.

Bei einem einfachen Verfahren zum Erstellen einer Objektinstanz wird kein ActionScript verwendet. Platzieren Sie in Flash Professional ein Movieclip-Symbol, ein Schaltflächensymbol oder ein Textfeld auf der Bühne und weisen Sie ihm einen Instanznamen zu. Flash Professional deklariert automatisch eine Variable mit diesem Instanznamen, erstellt eine Objektinstanz und speichert dieses Objekt in der Variablen. In Flex erstellen Sie auf ähnliche Weise eine Komponente in MXML, indem Sie entweder ein MXML-Tag kodieren oder die Komponente im Entwurfsmodus von Flash Builder im Editor platzieren. Wenn Sie dieser Komponente eine ID zuweisen, wird diese ID als Name einer ActionScript-Variable verwendet, die die jeweilige Komponenteninstanz enthält.

Doch wahrscheinlich möchten Sie Objekte nicht immer auf visuelle Weise erstellen, und bei nichtvisuellen Objekten ist dies auch gar nicht möglich. Mit mehreren weiteren Methoden können Sie Objektinstanzen erstellen, indem Sie ausschließlich ActionScript verwenden.

Bei mehreren ActionScript-Datentypen können Sie eine Instanz mit einem Literalausdruck erstellen. Dies ist ein Wert, der direkt in den ActionScript-Code geschrieben wird. Im Folgenden sind einige Beispiele für diese Situationen aufgeführt:

  • Numerischer Literalwert (geben Sie die Zahl direkt ein):

    var someNumber:Number = 17.239; 
    var someNegativeInteger:int = -53; 
    var someUint:uint = 22;
  • Literaler String-Wert (geben Sie den Text zwischen doppelten Anführungszeichen ein):

    var firstName:String = "George"; 
    var soliloquy:String = "To be or not to be, that is the question...";
  • Literaler Boolean-Wert (verwenden Sie die Literalwerte true oder false):

    var niceWeather:Boolean = true; 
    var playingOutside:Boolean = false;
  • Literaler Array-Wert (setzen Sie eine kommagetrennte Werteliste in eckige Klammern):

    var seasons:Array = ["spring", "summer", "autumn", "winter"];
  • XML-Literalwert (geben Sie die XML-Daten direkt ein):

    var employee:XML = <employee> 
            <firstName>Harold</firstName> 
            <lastName>Webster</lastName> 
        </employee>;

Darüber hinaus definiert ActionScript auch literale Ausdrücke für die Datentypen Array, RegExp, Object und Function.

Die üblichste Methode zum Erstellen einer Instanz für einen jeden Datentyp ist die Verwendung des new-Operators mit dem Klassennamen, wie im Folgenden gezeigt:

var raceCar:MovieClip = new MovieClip(); 
var birthday:Date = new Date(2006, 7, 9);

Die Erstellung eines Objekts mithilfe des new-Operators wird häufig als „Aufrufen des Klassenkonstruktors“ bezeichnet. Ein Konstruktor ist eine besondere Methode, die als Teil des Prozesses zum Erstellen einer Klasseninstanz aufgerufen wird. Wenn Sie eine Instanz auf diese Weise erstellen, müssen Sie nach dem Klassennamen Klammern einfügen. In einigen Fällen geben Sie in den Klammern Parameterwerte an. Diese beiden Schritte führen Sie auch beim Aufrufen einer Methode aus.

Den new-Operator können Sie auch bei den Datentypen, deren Instanzen mit einem Literalausdruck erstellt werden, zum Erstellen einer Objektinstanz verwenden. So haben die beiden folgenden Codezeilen dieselbe Funktionsweise:

var someNumber:Number = 6.33; 
var someNumber:Number = new Number(6.33);

Beim Erstellen von Objekten müssen Sie auf jeden Fall mit der Syntax new ClassName() vertraut sein. Viele ActionScript-Datentypen haben keine visuelle Darstellung. Sie können diese Datentypen deshalb nicht erstellen, indem Sie ein Element in Flash Professional auf der Bühne oder im Entwurfsmodus von Flash Builder im MXML-Editor platzieren. Instanzen dieser Datentypen können nur in ActionScript mithilfe des new-Operators erstellt werden.

Adobe Flash Professional

In Flash Professional können Sie den new-Operator auch verwenden, um eine Instanz eines Movieclip-Symbols zu erstellen, das zwar in der Bibliothek definiert ist, aber nicht auf der Bühne platziert wurde.