> Start
> Grundlagen
> Einbinden von
   Medienformaten
> ActionScript, PHP
   und MySQL
> Spiele-
   programmierung
> ActionScript
   und XML
> Quellen
  Grundlagen der Programmierung mit ActionScript



Das Praxisbuch ActionScript 3

Syntax

Grundlagen

Bezeichner

Bezeichner sind Namen für Variablen, Funktionen, Eigenschaften, Objekte oder Methoden. Bei der Wahl dieser Namen sind einige Regeln zu beachten:

• Sie müssen mit einem Buchstaben, Dollarzeichen ($) oder Unterstrich ( _ )
   beginnen.
• Alle darauf folgenden Zeichen können Buchstaben, Ziffern, Dollarzeichen oder
   Unterstriche sein.
• Es wird nicht zwischen Groß- und Kleinschreibung unterschieden.
• Es dürfen keine Leerzeichen enthalten sein.
• Es darf kein Schlüsselwort sein.

Schlüsselwörter

Schlüsselwörter sind reservierte Wörter, die im ActionScript-Code nicht als Bezeichner verwendet werden dürfen. Diese Wörter sind reserviert, weil sie bereits zur ActionScript-Syntax gehören.

ActionScript-Schlüsselwörter

 

add

else

new

this

break

for

on

typeof

case

function

onClipEvent

var

continue

if

return

void

default

in

super

while

delete

instanceof

switch

with


potentielle zukünftige Schlüsselwörter

 

abstract

enum

package

throws

byte

extends

private

try

catch

final

public

volatile

debugger

import

short

 

double

interface

synchronized

 

Kommentar

Man unterscheidet zwischen einzeiligem und mehrzeiligem Kommentar. Während der einzeilige Kommentar nur bis zum Zeilenende wirkt, kann der mehrzeilige Kommentar mehrer Zeilen umfassen.

// Dies ist ein einzeiliger Kommentar.

/* Dies ist ein mehrzeiliger Kommentar,
er wirkt bis zum Aufhebungszeichen. */

Semikolon

In ActionScript steht am Ende einer Anweisung ein Semikolon. Dieses kennzeichnet das Ende dieser Anweisung und trennt die einzelnen Anweisungen untereinander. Es ist auch zulässig dieses Semikolon wegzulassen. Eine Ausnahme stellt die Anweisung #include dar, nach ihr darf kein Semikolon gesetzt werden.

Punktsyntax

In ActionScript dienen Punkte zur Angabe des Zielpfades bei Filmsequenzen, Variablen, Funktionen und Objekten. Außerdem werden sie verwendet um Eigenschaften von Objekten aufzurufen, und sie damit abzufragen oder zu setzen.

Objekt.Methode(Argument);

Objekt.Eigenschaft = Wert;

Zielpfade

In ActionScript spielen die Pfadangaben eine wichtige Rolle.
Um ein Objekt der Hauptzeitleiste anzusprechen benutzt man den Alias _root.

_root.mc_Film.Eigenschaft = Wert;

Der Alias _parent erzeugt einen relativen Zielpfad. Dadurch lässt sich zum Beispiel in verschachtelten Filmsequenzen die jeweils übergeordnete Filmsequenz ansprechen.

_parent.Methode();

Die Hauptzeitleiste (_root oder auch _level0) stellt in einem Flash-Film immer die unterste Stufe dar. Mit der Aktion loadMovieNum lassen sich weitere Flash-Filme auf andere Stufen laden, wobei jeder Film seine eigene Zeitleiste hat und weitere Filmsequenzen enthalten kann. Dabei überdeckt ein Film auf einer höheren Stufe einen Film auf einer niedrigeren Stufe, wobei durch die leeren Bereiche des Filmes jeweils der darunter liegende Film zu sehen ist. Durch diese hierarchische Struktur lassen sich alle Objekte problemlos ansprechen und steuern.
Die Zeitleisten einzelner Flash-Filme untereinander erreicht man über die Anweisung _level0, _level1, _level2 usw.
Die Anweisung this bezieht sich immer auf die Instanz, die das Script beinhaltet. Diese Anweisung sollte auch bei der Zuweisung von Variablen verwendet werden.

Beispiel:

1. Sie wollen aus der Hauptzeitleiste Baum1 ansprechen:

     Baum1

    oder

     _root.Baum1

2. Sie wollen aus der Hauptzeitleiste Ast3 von Baum2 ansprechen:

    Baum2.Ast3

    oder

    _root.Baum2.Ast3

3. Sie wollen Blatt1 unsichtbar machen:

    Baum2.Ast2.Blatt1._visible = “false“;

    oder

    _root.Baum2.Ast2.Blatt1._visible = “false“;

4. Sie wollen aus Ast1 die Höhe von Baum1 setzten:

    _parent._height = 5;

    oder

    this._parent._height = 5;

5. Sie wollen aus Blatt2 die Deckkraft von Baum2 setzten:

    _parent._parent._alpha = 50;

    oder

    this._parent._parent._alpha = 50;

6. Sie wollen die Variable Blattlaus1 auf Blatt1 setzten:

    Baum2.Ast2.Blatt1.Blattlaus1 = „Hugo“;

    oder

    _root.Baum2.Ast2.Blatt1.Blattlaus1 = „Hugo“;

Operatoren

Arithmetische Operatoren

Operator

Bezeichnung

Bedeutung

 

+

Positives Vorzeichen

+a entspricht a

-

Negatives Vorzeichen

-a kehrt das Vorzeichen um

+

Addition

a+b ergibt die Summe von a und b

-

Subtraktion

a-b ergibt die Differenz von a und b

*

Multiplikation

a*b ergibt das Produkt aus a und b

/

Division

a/b ergibt den Quotienten von a und b

%

Modulo

a%b ergibt den Restwert der Division a/b

++

Präinkrement

++a ergibt a+1 und erhöht a um 1

++

Postinkrement

a++ ergibt a und erhöht a um 1

--

Prädekrement

--a ergibt a-1 und verringert a um 1

--

Postdekrement

a-- ergibt a und verringert a um 1

Vergleichsoperatoren

Operator

Bezeichnung

Bedeutung

 

kleiner als

a<b ergibt true, wenn a kleiner als b ist

größer als

a>b ergibt true, wenn a größer als b ist

<=

kleiner gleich

a<=b ergibt true, wenn a kleiner oder gleich b ist

>=

größer gleich

a>=b ergibt true, wenn a größer oder gleich b ist

 Vergleichsoperatoren vergleichen zwei Strings nach dem Latin-1 Zeichensatz. In diesem Zeichensatz kommen alle Großbuchstaben vor den Kleinbuchstaben, weshalb die Großbuchstaben kleiner sind.

Gleichheitsoperatoren

Operator

Bezeichnung

Bedeutung

 

==

Gleichheit

a==b ergibt true, wenn a gleich b ist

===

strikte Gleichheit

a===b ergibt true, wenn a gleich b ist und a und b vom gleichen Datentyp sind

!=

Ungleichheit

a!=b ergibt true, wenn a ungleich b ist

!==

strikte Ungleichheit

a!==b ergibt true, wenn a ungleich b ist und a und b vom gleichen Datentyp sind

Testet man zwei Variablen mit verschiedenen Datentypen auf einfache Gleichheit bzw. Ungleichheit, so werden die Datentypen in ActionScript automatisch umgewandelt.
Beim Vergleich von Referenztypen (Objekte, Arrays) werden nur die Referenzen verglichen und nicht die Objekte selbst. So können zwei verschiedene Arrays nie gleich sein, selbst wenn sie aus den gleichen Elementen bestehen.

Zuweisungsoperatoren

Operator

Bezeichnung

Bedeutung

 

=

einfache Zuweisung

a=b weist a den Wert von b zu und liefert b als Rückgabewert

+=

Additionszuweisung

a+=b weist a den Wert von a+b zu und liefert a+b als Rückgabewert

-=

Subtraktionszuweisung

a-=b weist a den Wert von a-b zu und liefert a-b als Rückgabewert

*=

Multiplikationszuweisung

a*=b weist a den Wert von a*b zu und liefert a*b als Rückgabewert

%=

Modulozuweisung

a%=b weist a den Wert von a%b zu und liefert a%b als Rückgabewert

/=

Divisionszuweisung

a/=b weist a den Wert von a/b zu und liefert a/b als Rückgabewert

Mehrere Zuweisungen innerhalb eines Ausdruckes werden von rechts nach links ausgewertet.

Beispiel: Initialisierung mehrerer Variablen in einem Ausdruck

    var a = b = c = 5;

Die Additionszuweisung arbeitet auch mit Strings, wobei sie eine Verknüpfung und Zuweisung ausführt.

Logische Operatoren

Operator

Bezeichnung

Bedeutung

 

&&

logisches UND (AND)

a&&b ergibt true, wenn sowohl a als auch b true sind. Ist einer der beiden Operatoren false, wird false zurückgegeben.

||

logisches ODER (OR)

a||b ergibt true, wenn mindestens einer der beiden Ausdrücke true ist.

!

logisches NICHT (NOT)

!a ergibt true, wenn a false ist, und ergibt false, wenn a true ist.

Alle logischen Operatoren vergleichen Boolesche Werte (true, false) und geben auch einen Booleschen Wert zurück.

Bit-Operatoren

Operator

Bedeutung

 

&

bitweises AND

|

bitweises OR

^

bitweises XOR

~

bitweises NOT

<< 

Verschiebung nach links

>> 

Verschiebung nach rechts

>>> 

Verschiebung nach rechts, auffüllen mit 0

<<=

bitweise Verschiebung nach links und Zuweisung

>>=

bitweise Verschiebung nach rechts und Zuweisung

>>>=

Verschiebung nach rechts, auffüllen mit 0 und Zuweisung

^=

bitweises XOR und Zuweisung

|=

bitweises OR und Zuweisung

&=

bitweises AND und Zuweisung

Bei der Rechnung mit bitweisen Operatoren werden Fließkommazahlen intern in 32-Bit-Ganzzahlen umgewandelt und deren Binärziffern unabhängig voneinander ausgewertet. Diese Operationen werden jedoch relativ selten benötigt.

Datentypen

Ein Datentyp beschreibt die Art der Information, die eine Variable enthalten kann. In ActionScript gibt es zwei Arten von Datentypen. Zum einen die Grunddatentypen, auch elementare Datentypen genannt und zum anderen die Referenzdatentypen.
Grunddatentypen enthalten den tatsächlichen Wert des von ihnen dargestellten Elements. Zu ihnen zählen String, Zahlen, Boolean, null und undefined.
Referenzdatentypen enthalten einen Verweis auf den tatsächlichen Wert des von ihnen dargestellten Elements. Zu ihnen gehören Filmsequenzen, Arrays und Objekte.

Datentyp

Beschreibung

 

String

Zeichenfolge (Buchstaben, Ziffern, Sonderzeichen)

Zahl

ganze Zahlen, Fließkommazahlen

Boolean

Wahrheitswerte (true und false)

Objekt

Datentyp Object(). Ein Objekt ist eine Sammlung von benannten Daten.

Filmsequenz

ermöglicht Steuerung von Filmsequenzsymbolen mit Hilfe der Methoden des Filmsequenz-Objekts.

null

kann einen Variablen zugeordnet werden, wenn diese zur Zeit keinen brauchbaren Wert enthält

undefined

Variablen, die definiert sind, denen aber noch kein Wert zugeordnet wurde haben den Wert undefined.

Array

Datentyp Array(). Ein Array ist ein Objekt, dessen Eigenschaften durch eine Zahl angegeben werden, die für die entsprechende Position im Array steht.

Strings

Ein String ist eine Zeichenkette, die aus Buchstaben Ziffern und Sonderzeichen bestehen kann. Zur Kennzeichnung wird ein String entweder von einfachen oder von doppelten Anführungszeichen eingeschlossen.

meinString = „text“;
meinString = ‚text’;


Soll im String ein einfaches Anführungszeichen als Sonderzeichen vorkommen, dann wird der String in doppelte Anführungszeichen eingeschlossen.

meinString = „Ich bin’s“;

Für den Fall, dass beide Arten von Anführungszeichen in einem String auftauchen, besteht die Möglichkeit die Anführungszeichen mit einem Backslash (\) zu entwerten.

meinString = „Er sagte: \„Ich bin\’s\““;

Wird in einem String ein Backslash als Sonderzeichen verwendet, so muss auch dieser von einem weiteren Backslash entwertet werden.

meinString =“C:\\test.exe“;

Die Kombination eines Backslashes und dem darauf folgendem Zeichen nennt man Escape-Sequenz. Diese kann man unter anderem dazu verwenden, um einen Zeilenumbruch zu erzwingen (\n). Weitere Escape-Sequenzen und deren Verwendung sind in der folgenden Tabelle aufgelistet.

Escape-Sequenz

Zeichen

 

\b

Rückschritt (Backspace, ASCII 8)

\f

Seitenvorschub (Form Feed, ASCII 12)

\n

Zeilenvorschub (Line Feed, ASCII 10)

\r

Wagenrücklauf (Carriage Return, ASCII 13)

\t

Tabulator (Tab, ASCII 9)

\“

doppeltes Anführungszeichen

\’

einfaches Anführungszeichen

\\

Backslash

\000 - \377

oktaler Byte-Wert

\x00 - \xFF

hexadezimaler Byte-Wert

\u0000 - \uFFFF

16 Bit-Unicode-Zeichen in Hexadezimalschreibweise

Es gibt zwei Möglichkeiten Strings miteinander zu verknüpfen. Zum einen den Additionsoperator, zum anderen die String-Methode concat().

string1 = „ActionScript “;
string2 = „macht Spaß“;

string_gesamt = “ActionScript “ + “macht Spaß”;
string_gesamt = string1 + string2;
string_gesamt = string1.concat(string2);

Zahlen

In ActionScript gibt es nur einen Datentyp für Zahlen. Dieser Datentyp wird intern mit dem String „number“ bezeichnet. Es wird nicht zwischen ganzzahligen Werten (integer) und Fließkommawerten (float) unterschieden. Alle Zahlen werden in einem acht Byte langem Fließkommaformat gespeichert.

Schreibweise:

zahl = 1000; // ganzzahliger Wert
zahl = 999.99; // Fließkommawert
zahl = 0x22ff; // Hexadezimalwert
zahl = 999.99e2; // Fließkommawert in Exponentialschreibweise


Nun gibt es noch zwei besondere Werte, die auftauchen können. Einer von ihnen ist ein spezieller Unendlichkeitswert, den ActionScript als Infinity ausgibt. Ein solcher Wert entsteht, wenn eine Zahl größer oder kleiner als der größte bzw. kleinste darstellbare Wert einer Fließkommazahl ist. Der Wert kann positiv unendlich, Infinity, oder negativ unendlich, -Infinity, sein.
Der zweite besondere Zahlenwert beschreibt ein undefiniertes Ergebnis, wie es zum Beispiel bei der Division durch 0 entsteht. In diesem Fall gibt ActionScript NaN zurück, was soviel bedeutet, wie Not-a-Number. Es gibt eine spezielle Funktion, isNaN(), um zu testen ob ein Wert Not-a-Number ist. Eine weitere Besonderheit dieses Wertes ist, dass jeder Vergleich mit ihm das Ergebnis false liefert, sogar der Vergleich mit sich selbst.

Methoden- und Eigenschaftenübersicht für das Number-Objekt:

Methode

Beschreibung

 

Number.toString

Gibt ein Number-Objekt als String zurück.

Number.valueOf

Gibt den Grundwerttyp eines Number-Objekts zurück.


Eigenschaft

Beschreibung

 

Number.MAX_VALUE

Konstante, die der größten darstellbaren Zahl entspricht.

Number.MIN_VALUE

Konstante, die der kleinsten darstellbaren Zahl entspricht.

Number.NAN

Konstante, die dem Wert für NaN entspricht.

Number.NEGATIVE_INFINITY

Konstante, die dem Wert für negative Unendlichkeit entspricht.

Number.POSITIVE_INFINITY

Konstante, die dem Wert für positive Unendlichkeit entspricht.

Boolean

Der Datentyp Boolean stellt einen Wahrheitswert dar, und hat zwei zulässige Werte, true (wahr) und false (falsch). Boolesche Werte sind in der Regel das Ergebnis von Vergleichen und werden mit Hilfe von Kontrollstrukturen, wie if-else-Anweisungen, zur Ablaufsteuerung benutzt.
ActionScript ist in der Lage den Zahlenwert 1 als true und der Zahlenwert 0 als false zu interpretieren.

Objekte

Ein Objekt ist eine Sammlung von benannten Daten, die man als Eigenschaften des Objekts bezeichnet. Handelt es sich bei einer solchen Eigenschaft um eine Funktion, so bezeichnet man diese als Methode des Objekts. Um die Eigenschaften oder Methoden eines Objekts aufzurufen verwendet man die Punktsyntax.

Objekt.farbe;
Objekt.groesse;

Objekt.bewegen;
Objekt.rotieren;

Filmsequenz

Filmsequenzen kann man sowohl als Objekt, als auch als Datentyp ansehen. Dieser Datentyp verweist auf Grafikelemente und ermöglicht die Steuerung von Filmsequenzsymbolen mit Hilfe der Methoden des MovieClip-Objekts.

Variablen

Definition

Variablen sind Behälter zum Speichern von Informationen, wobei der Behälter immer gleich bleibt und sich lediglich sein Inhalt ändert. Eine Variable besteht aus dem Variablennamen, einem Speicherbereich und einem Wert. Sie werden im Arbeitsspeicher des Computers abgelegt, auf dem der ActionScript-Code ausgeführt wird. Die Speicherverwaltung wird dabei von Interpreter übernommen.

Deklaration

Bei der Deklaration von Variablen wird das Schlüsselwort var verwendet, dadurch wird sie dem Interpreter bekannt gemacht und dieser reserviert Speicher.

var test;
var test1, test2;


Diese Deklaration ist allerdings nicht notwendig, sie trägt aber zur Übersicht des Codes bei. Es ist auch möglich Variablen ohne Deklaration direkt im Code zu verwenden, der Interpreter erzeugt die Variable dann in Echtzeit.
Als Initialisieren einer Variablen bezeichnet man das Zuweisen eines eindeutigen Wertes bei der Deklaration der Variablen.

var test = 1000;
test = „Hallo Welt!“;

Variablentypen

Zeitleistenvariablen

Zeitleistenvariablen werden mit dem Zuweisungsoperator (=) deklariert. Sie können unter Angabe des Zielpfades in jeder Zeitleiste verwendet werden.

Lokale Variablen

Lokale Variablen werden mit der Anweisung var im Hauptabschnitt einer Funktion deklariert. Sie ist nur innerhalb des Codeblocks (durch geschweifte Klammern begrenzt) gültig in dem sie deklariert wurde. Wurde sie nicht innerhalb eines Blockes deklariert, so verliert sie ihre Gültigkeit am Ende des Skripts.

Globale Variablen

Globale Variablen werden durch den Bezeichner _global deklariert.

_global.test = „Hallo Welt!“;

Globale Variablen können ohne Angabe des Zielpfades in jeder Zeitleiste verwendet und geändert werden.

Typenkonvertierung

ActionScript ist nicht typisiert, dass heißt Variablen können Werte beliebigen Typs enthalten. Es ist also möglich, dass eine Variable zunächst einen Wert vom Typ Zahl enthält und dann einen Wert vom Typ String zugewiesen bekommt. ActionScript konvertiert automatisch zwischen den verschiedenen Datentypen.

Strings

Verwendet man den (+)-Operator, dann erfolgt die automatische Typenkonvertierung nach folgenden Regeln:

• Sind zwei oder mehr Operanden numerisch, dann werden sie addiert.
• Sind zwei oder mehr Operanden Strings, dann werden sie verknüpft bzw.
   aneinander gehängt.
• Ist ein Operand String und der andere nicht, dann wird der Nicht-String-Operand in
   einen String umgewandelt, und anschließend beide Strings verknüpft.

Möchte man die Typenkonvertierung in einen String explizit vornehmen, erfolgt dies durch die Methode toString().

Zahlen

In numerischen Kontexten funktioniert die automatische Typenkonvertierung wie folgt:

• Wenn ein String vollständig die Dezimaldarstellung einer ganzen oder einen
   Fließkommazahl enthält, und keine unzulässigen Zeichen auftreten, wird der String
   in diese Zahl umgewandelt.
• Der boolesche Wert true wird in die Zahl 1 umgewandelt, false in die zahl 0.
• null wird in die Zahl 0 umgewandelt.

Möchte man explizit in eine Zahl konvertieren, stehen die Funktionen parseInt() für ganze Zahlen und parseFloat() für Fließkommazahlen zur Verfügung.

Boolesche Werte

Bei der Verwendung von booleschen Kontexten gelten folgende Regeln zur automatischen Typenkonvertierung:

• Die Zahl 0 wird in false umgewandelt, alle anderen Zahlen in true.
• Der leere String („“) wird in false umgewandelt, alle anderen Strings in true.
• null wird in false umgewandelt.
• undefined wird in false umgewandelt.

Objekte

Wird ein Wert in einem Objektkontext verwendet, zum Beispiel Eigenschaften abgefragt oder Methoden aufgerufen, dann wird er temporär in ein Objekt umgewandelt. Ein String würde beispielsweise in ein String-Objekt konvertiert werden, das den selben Wert darstellt wie der ursprüngliche String. Das String Objekt definiert zusätzlich die Eigenschaft length und stellt einige Methoden zur Verfügung.

Beispiel:

wort= „wertvoll“;
anzahlZeichen = wort.length; // Ergebnis: 8
ersterTeil = wort.substring(0,4); // Ergebnis: „wert“

Kontrollstukturen

Kontrollstrukturen dienen zur Ablaufsteuerung eines Programms. Es ist möglich einzelne Programmteile in Abhängigkeit von bestimmten Bedingungen auszuführen oder Anweisungsblöcke beliebig oft zu wiederholen.

If-Anweisung

Bei einer If-Anweisung wird anhand einer Bedingung entschieden, ob die nachfolgenden Anweisungen ausgeführt werden oder nicht.

Syntax:

if(Bedingung)
{
Anweisung/en;
}


If-else-Anweisung

Die if-else-Anweisung hat im Unterschied zur if-Anweisung noch einen zweiten Anweisungsblock, der ausgeführt wird wenn die Bedingung der If-Anweisung false ist.

Syntax:

if(Bedingung)
{
Anweisung/en;
}
else
{
Anweisung/en;
}


If-else-if-Anweisung

Bei der If-else-if-Anweisung ist es möglich für mehrere Bedingungen Anweisungen bereitzustellen. Im Unterschied zur If-else-Anweisung, bei der nur eine Bedingung entweder true oder false sein kann und damit nur eine Zweifachverzweigung möglich ist, bietet die If-else-if-Anweisung eine Mehrfachverzweigung. Bei der Mehrfachverzweigung wird der Wert einer Variablen abgefragt, wodurch mehrere alternative Verzweigungen möglich werden.

Syntax:

if(Bedingung)
{
Anweisung/en;
}
else if(Bedingung)
{
Anweisung/en;
}
else if(Bedingung)
{
Anweisung/en;
}
.
.
.
else
{
Anweisung/en;
}


Beispiel:

if(a==1)
{
ergebnis=“sehr gut“;
}
else if(a==2)
{
ergebnis=“gut“;
}
else if(a==3)
{
ergebnis=“befriedigend“;
}
else
{
ergebnis=“durchgefallen“;
}


Switch-Case-Anweisung

Die Switch-Case-Anweisung ist eine Alternative zur If-else-if-Anweisung. Sie ermöglicht ebenfalls Mehrfachverzweigungen, wobei die Syntax wesentlich übersichtlicher ist.
Jeder Anweisungsblock sollte mit einer break-Anweisung abgeschlossen sein, damit die switch-Anweisung nicht unnötig durchlaufen wird, falls bereits eine Übereinstimmung mit dem case-Wert aufgetreten ist.
Der default-Block wird ausgeführt, falls keiner der case-Werte zutrifft und kann auch weggelassen werden.

Syntax:

switch(Bedingung)
{
case wert:
Anweisung/en;
break;
case wert:
Anweisung/en;
break;
.
.
.
[default:]
[Anweisung/en;]
}


Beispiel:

switch(a)
{
case 1:
ergebnis=“sehr gut“;
break;
case 2:
ergebnis=“gut“;
break;
case 3:
ergebnis=“befriedigend“;
break;
default:
ergebnis=“durchgefallen“;
}

While-Schleife

Eine Schleife ermöglicht es einen Anweisungsblock zu wiederholen und dabei bestimmte Variablen für den nächsten Durchlauf zu verändern.
Bei einer While-Schleife wird zuerst die Bedingung geprüft. Ist diese Bedingung false, wird der Anweisungsblock innerhalb der Schleife übersprungen, ist die Bedingung allerdings true wird der Anweisungsblock ausgeführt. In diesem Anweisungsblock werden dann eine oder mehrer Variablen verändert, die Einfluss auf die Bedingung der While-Schleife haben. Solche Variablen nennt man Schleifen- oder Zählvariablen und meistens werden sie im Anweisungsblock inkrementiert (i++) oder dekrementiert (i--). Danach wird die Bedingung der Schleife erneut geprüft, und wenn diese wieder true ist wird der Anweisungsblock ein weiteres Mal ausgeführt.
Es ist unbedingt darauf zu achten, das die Bedingung einer Schleife irgendwann false sein muss, da man sonst eine so genannte Endlosschleife erzeugt, und das Programm nicht weiter ausgeführt wird.

Syntax:

while(Bedingung)
{
Anweisung/en;
}

Beispiel:

i=0;

while(i<10)
{
trace(i);
i++;
}

// Ergebnis: 0 1 2 3 4 5 6 7 8 9


Do-While-Schleife

Der Unterschied zwischen While-Schleife und Do-While-Schleife besteht darin, dass bei einer Do-While-Schleife der Anweisungsblock zuerst ausgeführt wird, bevor die Bedingung geprüft wird. Ist die Bedingung dann true, wird der Block erneut ausgeführt. Daraus folgt, dass der Anweisungsblock einer Do-While-Schleife auf jeden Fall einmal ausgeführt wird, egal ob die Bedingung am Ende true oder false ist.
Eine Do-While-Schleife bezeichnet man auch als Endgeprüfte Schleife.

Syntax:

do
{
Anweisung/en;
}
while(Bedingung);


Beispiel:

i=20;

do
{
trace(i);
i++;
}
while(i<10);

// Ergebnis: 20


For-Schleife

Die For-Schleife entspricht der Funktion der While-Schleife, ist syntaktisch aber übersichtlicher. Bei der For-Schleife wird im Kopf der Schleife die Zählvariable deklariert, die Bedingung geprüft und die Zählvariable verändert (z.B. inkrementiert/ dekrementiert). Diese Form eignet sich am besten für Fälle, bei denen die Anzahl der Schleifendurchläufe von vorn herein feststeht.

Syntax:

for(Zählvariable; Bedingung; Veränderung)
{
Anweisung/en;
}

Beispiel:

for(var i=0; i<10; i++)
{
trace(i);
}

// Ergebnis: 0 1 2 3 4 5 6 7 8 9


For-in-Schleife

Die For-in-Schleife bietet eine einfache Möglichkeit, alle Elemente eines Arrays, eines Objekts oder alle Variablen und Instanzen einer Filmsequenz zu durchlaufen.

Syntax:

for(Iterationvariable in Objekt)
{
Anweisung/en;
}


Break-Anweisung

Diese Anweisung bietet die Möglichkeit eine Schleife vorzeitig zu beenden. Sie kann innerhalb von While-, Do-while-, For-, und For-in-Schleifen oder der Switch-Anweisung verwendet werden.

Continue-Anweisung

Wie die Break-Anweisung kann auch die Continue-Anweisung innerhalb von While-, Do-while-, For-, und For-in-Schleifen oder der Switch-Anweisung verwendet werden.
Allerdings wird mit Continue nicht die gesamte Schleife sondern nur der aktuelle Schleifendruchlauf abgebrochen. Nach einer Continue-Anweisung springt der Interpreter zur Bedingung der Schleife und setzt die Durchführung fort.

With-Anweisung

Die With-Anweisung bietet eine vereinfachte Schreibweise,die nützlich ist, wenn man zum Beispiel mehrfach auf dasselbe Objekt zugreifen möchte. Das Objekt und der zugehörige Zielpfad werden der With-Anweisung übergeben, womit alle Eigenschaften und Methoden des Objektes innerhalb der Anweisungen ohne Zielpfad ansprechbar sind. Variablen müssen innerhalb einer With-Anweisung mit vollständigem Zielpfad deklariert werden.

Syntax:

with (Zielpfad.Objekt)
{
Anweisung/en;
}

Beispiel:

with (andererMovieclip) {
_x = 50;
_y = 100;
}

// ohne with()-Anweisung:

andererMovieclip._x = 50;
andererMovieclip._y = 100;

Ereignisse

Möchte man einen Flash-Film interaktiv werden lassen und zu bestimmten Zeitpunkten bestimmte Anweisungen ausführen sind Ereignisse von großer Bedeutung. Man unterscheidet zwischen selbstauslösenden Ereignissen, zum Beispiel wenn eine Filmsequenz geladen wurde, und benutzerdefinierten Ereignissen, wie das bewegen der Maus.
Die Ereignisse werden nur der jeweils ausgewählten Instanz auf der Bühne zugewiesen und haben auf das Symbol in der Bibliothek keinen Einfluss.

Syntax für Schaltflächen:

on(Ereignis)
{
Anweisung/en;
}


Mögliche Ereignisse für Schaltflächen:

Ereignis

Ereignisprozedurmethode

Beschreibung

 

on(press)

Instanzname.onPress

Anwender drückt Schaltfläche mit linker Maustaste.

on(release)

Instanzname.onRelease

Anwender lässt linke Maustaste innerhalb der Schaltfläche, in der sie gedrückt wurde, wieder los.

on(releaseOutside)

Instanzname.onReleaseOutside

Anwender lässt linke Maustaste außerhalb der Schaltfläche, in der sie gedrückt wurde, wieder los.

on(rollOver)

Instanzname.onRollOver

Anwender betritt mit Mauscursor die Schaltfläche.

on(rollOut)

Instanzname.onRollOut

Anwender verlässt mit Mauscursor die Schaltfläche.

on(dragOver)

Instanzname.onDragOver

Anwender zieht mit gedrückter linker Maustaste den Mauscursor in die Schaltfläche hinein.

on(dragOut)

Instanzname.onDragOut

Anwender zieht mit gedrückter linker Maustaste. den Mauscursor aus der Schaltfläche heraus.

on(keyPress“…“)

Instanzname.onKeyUp

Instanzname.onKeyDown

Anwender drückt die festgelegte Taste auf der Tastatur.

Syntax für Filmsequenzen:

onClipEvent(Ereignis)
{
Anweisung/en;
}


Mögliche Ereignisse für Filmsequenzen:

Ereignis

Ereignisprozedurmethode

Beschreibung

 

onClipEvent(load)

Instanzname.onLoad

Anweisungen werden ausgeführt, sobald die Instanz in den Speicher geladen wurde.

onClipEvent(unload)

Instanzname.onUnload

Anweisungen werden ausgeführt, sobald die Instanz aufhört, auf der Bühne zu existieren.

onClipEvent(enterFrame)

Instanzname.onEnterFrame

Anweisungen werden ausgeführt, solange die Instanz auf der Bühne existiert. Das Ereignis wird in ständiger Wiederholung ausgeführt.

onClipEvent(mouseDown)

Instanzname.onMouseDown

Anweisung wird ausgeführt, wenn der Anwender die linke Maustaste drückt, solange die Instanz auf der Bühne existiert.

onClipEvent(mouseUp)

Instanzname.onMouseUp

Anweisung wird ausgeführt, wenn der Anwender die linke Maustaste loslässt, solange die Instanz auf der Bühne existiert.

onClipEvent(mouseMove)

Instanzname.onMouseMove

Anweisung wird ausgeführt, wenn der Anwender die linke Maustaste bewegt, solange die Instanz auf der Bühne existiert.

onClipEvent(keyDown)

Instanzname.onKeyDown

Anweisung wird ausgeführt, wenn der Anwender eine Taste auf der Tastatur drückt, solange die Instanz auf der Bühne existiert.

onClipEvent(keyUp)

Instanzname.onKeyUp

Anweisung wird ausgeführt, wenn der Anwender eine Taste auf der Tastatur loslässt, solange die Instanz auf der Bühne existiert.

onClipEvent(data)

Instanzname.onData

Anweisung wird ausgeführt, sobald eine bestimmte Dateninformation, z.B. aus einer Datenbank, vollständig übertragen wurde.

Seit Flash MX gibt es ein neues Ereignismodell. Dabei ist es möglich Filmsequenz- oder Schaltflächeninstanzen direkt Anweisungen zuzuweisen, egal ob diese bereits bestehen oder dynamisch erzeugt werden. Dabei wird eine Funktion definiert, die anschließend der betreffenden Instanz zugewiesen wird. Diese Ereignisprozedurmethoden werden in einem Schlüsselbild definiert, was die Verwaltung der Skripts vereinfacht.

Syntax: Ereignisprozedurmethode für Filmsequenzen und Schaltflächen

Instanz.Ereignisprozedurmethode = function()
{
Anweisung/en;
}


Beispiel:

MeineFigur.onMouseDown = function()
{
this._x = this._x + 20;
}

Funktionen

Funktionen sind Codeblöcke, die mit einem Namen verbunden sind und bestimmte Aufgaben übernehmen. Es gibt in ActionScript bereits vordefinierte Funktionen, es ist aber auch möglich eigene Funktionen zu definieren.

Syntax:

function funktionsname([Parameter])
{
Anweisung/en;
}


oder

funktionsname = function([Parameter])
{
Anweisung/en;
}


Die benutzerdefinierten Funktionen können an unterschiedlichen Stellen platziert werden, zum Beispiel auf einer Schaltfläche oder Filmsequenz, zu empfehlen ist aber die Ablage in Bildern, weil es das Aufrufen der Funktion erleichtert. Da eine Funktion nicht vor ihrer Definition aufgerufen werden kann, ist es ratsam alle Funktionen im ersten Schlüsselbild zu definieren.

Beispiel:

function positionieren()
{
this._x = 100;
this._y = 100;
}
positionieren = function()
{
this._x = 100;
this._y = 100;
}


In einer Funktion sollte immer die Objektreferenz this verwendet werden, da sich diese auf das Objekt bezieht, auf welches die Funktion angewendet wird. So lassen sich Funktionen für verschiedene Objekte und Instanzen verwenden ohne jedes Mal den absoluten Zielpfad angeben zu müssen.

Einer Funktion können bei deren Aufruf Parameter übergeben werden. Ein Parameter ist eine Variable, der beim Aufruf der Funktion ein Wert zugewiesen wird. Diese Variable ist nur innerhalb des Anweisungsteils der Funktion gültig.

Beispiel:

function positionieren(posX, posY)
{
this._x = posX;
this._y = posY;
}

// Aufruf der Funktion:

positionieren(200, 100);


Soll eine Funktion einen Wert zurückgeben, verwendet man das Schlüsselwort return. Die return-Anweisung führt allerdings immer dazu, dass eine Funktion danach beendet wird, deshalb sollte die return-Anweisung immer am Ende des Anweisungsblockes einer Funktion stehen.

Syntax:

return ergebnisWert;

Beispiel:

function quadrieren(a)
{
var ergebnis = a*a;

return ergebnis;
}



In ActionScript gibt es eine einfache Methode rekursive Funktionen zu erzeugen. Dazu steht die Funktion setInterval() zur Verfügung, die dafür sorgt, dass eine Funktion in bestimmten definieren Abständen erneut aufgerufen wird. Damit lässt sich die zeitliche Ausführung der Rekursion steuern.

Beispiel:

function digitaluhr()
{
zeit = new Date();

stunde = zeit.getHours();
minute = zeit.getMinutes();
sekunde = zeit.getSeconds();

ausgabe = stunde + „:“ + minute + „:“ + sekunde;

setInterval(digitaluhr, 1000);
/* Aufrufen der Funktion digitaluhr alle 1000 Millisekunden */
}

 

Arrays

Ein Array ist ein Datentyp, in dem beliebig viele Werte verschiedenen Datentyps gespeichert werden können. Um auf einen bestimmten Wert in einem Array zuzugreifen, nutz man die Tatsache, dass alle Werte eines Arrays durchnummeriert sind.

Erzeugen eines Arrays

Mit einem Array kann man nur arbeiten, wenn der Ausdruck einer Variablen zugewiesen wird, über die das Array später angesprochen werden kann.

Syntax:

namen = [“Otto“,“Maria“,“Franz“,“Lisa“];

oder:

namen = new Array(“Otto”,”Maria”,”Franz”,”Lisa”);

Es ist auch möglich ein leeres Array zu erzeugen und dieses später mit Elementen zu füllen. Dabei sollte beachtet werden, dass die leeren Elemente den Wert undefined haben, bis ihnen ein Wert zugewiesen wird.

Syntax:

namen = new Array(4); //Array mit 4 leeren Elementen

oder

namen = new Array(); //leeres Array ohne Elemente

Auslesen eines Arrays

Zuerst muss man wissen, dass das erste Element eines Arrays immer den Index 0 hat! Der letzte Index ergibt sich demnach auch der Anzahl der Elemente verringert um eins. Zur Bestimmung der Anzahl der Elemente eines Arrays gibt es die Eigenschaft length.

Syntax:

variable1 = array[0];
variable2 = array[1];
variable3 = array[2];


oder in Form einer Schleife:

for( var i = 0; i < array.length; i++)
{
trace(array[i]);
}

oder:

for(i in array)
{
trace(array[i]);
}

Hinzufügen und Löschen von Array-Elementen

Array-Elemente können durch eine einfache Zuweisung hinzugefügt werden.

Syntax:

namen = new Array();

namen[0] = „Otto“;
namen[1] = „Maria“;
namen[2] = „Franz“;
namen[3] = „Lisa“;


Gibt es an der vorgesehenen Position noch kein Element, dann legt der Interpreter ein neues Element an. Ist bereits ein Element mit einem Wert vorhanden, dann wird dieser Wert überschrieben. Entsteht zwischen dem letzten Element und dem neuen Element eine Lücke, so wird diese mit leeren Elementen gefüllt.

Mit der delete-Anweisung lassen sich Array-Elemente einfach entfernen.

Syntax:

delete namen[0];


Es ist auch möglich das Array mit der length-Eigenschaft um eine bestimmte Anzahl von Elementen zu vergrößern oder zu verkleinern. Dabei werden entweder leere Elemente angehängt, oder die letzten Elemente entfernt.

Syntax:

namen = new Array(4);

namen.length = 10; // 6 leere Elemente anhängen
namen.length = 2; // 2 Elemente an Ende entfernen


Array-Methoden

push()

Mit dieser Methode kann man ein oder mehrere Elemente an das Ende eines Arrays anhängen.

Beispiel:

namen = [„Otto“,“Maria“];

namen.push(„Fritz“,“Lisa“);


unshift()

Mit dieser Methode lassen sich ein oder mehrere Elemente vor den Anfang des Arrays einfügen.

Beispiel:

namen = [„Otto“,“Maria“];

namen.unshift(„Fritz“,“Lisa“);


pop()

Mit dieser Methode kann man das letzte Element eines Arrays entfernen.

Beispiel:

namen = [„Otto“,“Maria“];

namen.pop();


shift()

Mit dieser Methode kann man das erste Element eines Arrays entfernen.

Beispiel:

namen = [„Otto“,“Maria“];

namen.shift();


splice()


Mit dieser Methode ist es möglich einen Teil des Arrays zu löschen oder durch andere Elemente zu ersetzen.

Beispiel:

namen = [„Otto“,“Maria“,“Fritz“,“Lisa“];

namen.splice(1,2); /* entfernt ab Index 1 zwei Elemente (Maria und Fritz)*/

namen.splice(2) /* entfernt ab Index 2 alle Elemente
(Fritz und Lisa)*/

namen.splice(2,1,“Paul“); /* ersetzt ab Index 2 ein Element (Fritz durch Paul)*/


reverse()

Diese Methode kehrt die Reihenfolge der Elemente im Array um.

Beispiel:

namen = [„Otto“,“Maria“];

namen.reverse();


slice()

Diese Methode kopiert einen Teil des Arrays und liefert diesen als neues Array zurück. Als Parameter erwartet diese Methode den Index des ersten zu kopierenden Elementes und den Index des Elementes das nicht mehr kopiert werden soll.

Beispiel:

namen = [„Otto“,“Maria“,“Fritz“,“Lisa“];

namen.slice(1,3); /* kopiert Index 1 und 2 (Maria und Fritz)*/

namen.slice(2); /* kopiert ab Index 2 bis ans Ende (Fritz und Lisa)*/


join()


Mit dieser Methode lässt sich ein Array in einen String umwandeln. Als Parameter erwartet diese Methode ein Trennzeichen oder eine Trennzeichenfolge, die zwischen die Array-Elemente eingefügt wird. Ohne Parameter wird das Komma als Trennzeichen verwendet.

Beispiel:

namen = [„Otto“,“Maria“];

namen.join(;); // Ergebnis: „Otto;Maria“


toString()


Diese Methode wandelt ein Array in einen String um, wobei als Trennzeichen das Komma verwendet wird. Diese Methode erwartet keine Parameter.

concat()


Diese Methode dient zum Aneinanderhängen von Arrays.

Beispiel:

namen1 = [„Otto“,“Maria“];
namen2 = [„Fritz“,“Lisa“];

alleNamen = namen1.concat(namen2);


sort()


Diese Methode sortiert ein Array alphabetisch nach dem Latin-1-Zeichnsatz.

Beispiel:

namen = [„Otto“,“Maria“,“Fritz“,“Lisa“];

namen.sort(); //Ergebnis:[„Fritz“,“Lisa“,“Maria“,“Otto“]


Da diese Methode aber nach Latin-1-Zeichensatz sortiert, wäre zum Beispiel beim Sortieren von Zahlen eine Zahl, die mit der Ziffer 1 beginnt generell kleiner als eine Zahl die mit der Ziffer 2 beginnt unabhängig von deren Länge (z.B.: 1000<20).
Um dieses Problem zu lösen muss man der Methode sort() ein Sortierkriterium übergeben. Ein solches Sortierkriterium ist eine Funktion mit folgenden Eigenschaften:

• negativen Wert zurückgeben wenn a<b
• positiven Wert zurückgeben wenn a>b
• 0 zurückgeben wenn a==b

Beispiel:

function sortzahlen(a,b){
if(a>b)
{
return 1;
}
else if(a<b)
{
return -1;
}
else
{
return 0;
}
}

zahlen = [100,500,300,600,200];

zahlen.sort(sortzahlen);

// Ergebnis: [100,200,300,500,600]


Mehrdimensionale Arrays

Ein mehrdimensionales Array entsteht, wenn die Elemente eines Arrays selbst Arrays sind.

Beispiel:

// mehrdimensionales Array erzeugen:

namen = [
[„Maus“,“Otto“],
[„Mai“,“Maria“],
[„Müller“,“Fritz“],
[„Schulz“,“Lisa“]
];

//Zugriff:

vorname1 = namen[0][1]; //Ergebnis: Otto
vorname2 = namen[1][1]; // Ergebnis: Maria


Assoziative Arrays

Assoziative Arrays sind Arrays, die nicht über ihren Index, sondern über Strings angesprochen werden.

Beispiel:

// assoziative Arrays erzeugen:

person = new Array();

person[“vorname”] = “Otto”;
person[“nachname”] = “Maus”;
person[“alter”] = 40;

oder:

person = new Array();

person.vorname = “Otto”;
person.nachname = “Maus”;
person.alter = 40;


//Zugriff:

vorname = person[„vorname“]; //Ergebnis: Otto
nachname = person[„nachname“]; // Ergebnis: Maus
alter = person[„alter“]; // Ergebnis: 40

oder:

vorname = person.vorname; //Ergebnis: Otto
nachname = person.nachname; // Ergebnis: Maus
alter = person.alter; // Ergebnis: 40


Bei assoziativen Arrays ist zu beachten, dass die Elemente nicht über den Index angesprochen werden können und dass die Eigenschaft length nicht erkannt wird und somit nicht verwendet werden kann.

 

 
© Saskia Bretschneider - CT01w1