| |
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.
|