Kapitel 10 Kontrollstrukturen
Ob und wie oft Anweisungen ausgeführt werden
Flash arbeitet die in einem Skript enthaltenen Anweisungen nacheinander von oben nach unten ab, bis das Ende des Skripts erreicht ist. Mit Hilfe von Kontrollstrukturen nehmen Sie Einfluss auf diese Reihenfolge.
Es ist nicht immer ganz einfach, die Einzelschritte computergerecht zu formulieren. z.B. gibt es einige Schritte, die von Bedingungen wie »bis der Teig nicht mehr zu flüssig ist« oder »wurde das Raumschiff getroffen« abhängig sind. Glücklicherweise bieten Programmiersprachen aber auch dafür Anweisungen wie z.B. Kontrollstrukturen in zahlreichen Varianten an:
wiederhole {
verrühre Teig;
} solange (Teig nicht zu flüssig);
bedingte Anweisung
Sollte eine Aktion oder ein Block von Aktionen abhängig von einer Bedingung einmalig ausgeführt werden, dann spricht man von einer bedingten Anweisung: »Wenn die Ampel rot ist, dann bleibe stehen!«
// Bedingte Anweisung
if (ampelIstRot()) {
halteAn();
}
Schleife
Sollen die Anweisungen wiederholt werden, dann handelt es sich um eine Schleife: »Reduziere Geschwindigkeit, solange das Auto nicht steht!« oder »Blinke drei Mal!«
//_Bedingte_Schleife
while_(autoStehtNicht)_{
___reduziereGeschwindigkeit();
}
//_Zaehlschleife
for_(var_zaehler=0;_zaehler<3;_zaehler=zaehler+1)_{
___blinke();
}
10.1 Bedingte Anweisungen
Bedingte Anweisungen helfen zu entscheiden, ob Flash einen Block von Aktionen ausführt oder nicht. Sollten Sie mehrere Alternativen – abhängig von unterschiedlichen Bedingungen – benötigen, dann verwenden Sie dafür ebenfalls bedingte Anweisungen.
10.1.1 if
Hier klicken, um das Bild zu Vergrößern
Abbildung 10.1
Abarbeitung der Aktionen in einer bedingten Anweisung (if)
Das if können Sie sich wie das konditionale Wenn vorstellen. Anstelle von »Wenn Sandra Zeit hat, dann treffe ich mich mit ihr«, schreiben Sie in ActionScript so etwas wie
if (sandra.hatZeit()) {
ich.treffe(sandra);
}
Die Anweisung if finden Sie innerhalb des ActionScript-Editors unter Anweisungen • Bedingungen/Schleifen. Diese Anweisung signalisiert, dass die ihr folgenden Befehle nur ausgeführt werden, falls die angegebene Bedingung wahr (true) ist. Als Bedingung geben Sie einen beliebigen Ausdruck an, dessen Ergebnis ein boolescher Wert ist (true oder false).
Die von der Bedingung abhängigen Aktionen werden innerhalb von geschweiften Klammern bestimmt (sozusagen wie bei einer Gruppierung durch die Klammern zu einer Anweisung zusammengefasst). Sollten Sie nur eine einzige Aktion angeben, dann dürfen Sie auf die geschweiften Klammern verzichten und anstelle von
if (sandra.hatZeit()) {
ich.treffe(sandra);
}
auch
if (sandra.hatZeit()) ich.treffe(sandra);
schreiben! Die »lange« Schreibweise ist jedoch meist besser lesbar.
Das folgende Skript macht Gebrauch vom if und bewegt ein Objekt mit Hilfe von ActionScript horizontal über die Bühne; sobald der rechte Rand der Bühne erreicht ist, setzt das Skript das Objekte wieder an den linken Rand.
box_mc.onEnterFrame = function() {
02_Programmierung\Kontrollstrukturen
// Verschiebe Objekt
this._x = this._x+5;
// Wenn das Objekt am Ende angekommen ist
if (this._x>550) {
// dann setze es wieder auf den Anfang
this._x = 0;
}
};
10.1.2 else
Das else erweitert die Aktion if um einen alternativ auszuführenden Block, der dem umgangssprachlichen sonst entspricht. Anstelle von »Wenn Sandra Zeit hat, dann treffe ich mich mit ihr, sonst lerne ich Flash«, schreiben Sie in ActionScript so etwas wie
if (sandra.hatZeit()) {
ich.treffe(sandra);
} else {
ich.lerne(flash);
}
Hier klicken, um das Bild zu Vergrößern
Abbildung 10.2
Abarbeitung der Aktionen in einer bedingten Anweisung (if und else)
Die Anweisung else finden Sie innerhalb des ActionScript-Editors ebenfalls unter Anweisungen • Bedingungen/Schleifen. Diese Anweisung signalisiert im Zusammenspiel mit der if-Anweisung, dass die ihr folgenden Befehle nur ausgeführt werden, falls die bei if angegebene Bedingung falsch (false) ist.
Die Befehle werden innerhalb von geschweiften Klammern bestimmt. Sollten Sie nur einen einzigen Befehl angeben, dann dürfen Sie auf die geschweiften Klammern verzichten und anstelle von
if (sandra.hatZeit()) {
ich.treffe(sandra);
} else {
ich.lerne(flash);
}
ebenfalls
if (sandra.hatZeit()) ich.treffe(sandra); else ich.lerne(flash);
schreiben! Die längere Schreibweise ist jedoch besser lesbar.
Das folgende Skript macht Gebrauch von if mit else und bewegt ein Objekt mit Hilfe von ActionScript horizontal über die Bühne; sobald der rechte Rand der Bühne erreicht ist, setzt das Skript das Objekte wieder an den linken Rand.
box_mc.onEnterFrame = function() {
02_Programmierung\Kontrollstrukturen
// Wenn das Objekt am Ende angekommen ist
if (this._x>550) {
// dann setze es wieder auf den Anfang
this._x = 0;
} else {
// sonst verschiebe das Objekt
this._x = this._x+5;
}
};
10.1.3 else if (mehr als eine Alternative)
Falls Sie mehrere Alternativen gleichzeitig überprüfen möchten, dann lassen sich if-Anweisungen ineinander schachteln:
if (bedingung1) {
// Anweisungen1
} else {
if (bedingung2) {
// Anweisungen2
} else {
if (bedingung3) {
// Anweisungen3
} else {
// Anweisungen4
}
}
}
Anstelle von dieser Verschachtelung bietet Flash das else if, das ebenfalls eine Bedingung überprüft:
if (bedingung1) {
// Anweisungen1
} else if (bedingung2) {
// Anweisungen2
} else if (bedingung3) {
// Anweisungen3
} else {
// Anweisungen4
}
10.1.4 switch und break
switch
Eine weitere Möglichkeit für die bedingte Ausführung von Programmcode ist die switch-Anweisung. In diesem Fall prüft Flash einen Ausdruck jeweils auf die strikte Gleichheit (d.h. dass sowohl der Wert als auch der Datentyp identisch sein müssen) mit weiteren Ausdrücken. So muss nicht zwangsläufig eine Bedingung verwendet werden:
switch (ausdruck) {
case ausdruck1 :
// anweisungen1
break;
case ausdruck2 :
// anweisungen2
break;
case ausdruck3 :
// anweisungen3
break;
default :
// anweisungen4
}
break bricht Kontrollstrukturen ab!
Die break-Anweisung am Ende der einzelnen case-Blöcke ist notwendig, um die Ausführung mehrerer case-Anweisungen zu verhindern. Denn sobald die erste Bedingung erfüllt ist, werden alle weiteren case-Blöcke unabhängig von ihrem Ausdruck abgearbeitet. Wenn also ausdruck === ausdruck2 gilt, dann wird auch der restliche Programmcode inklusive den anweisungen3 und den anweisungen4 ausgeführt. Das break verhindert dies, indem die komplette Kontrollstruktur beendet wird.
In dem default-Bereich geben Sie die Anweisungen an, die ausgeführt werden sollen, falls keine der vorherigen Bedingungen zutrifft. Dies entspricht in etwa dem else bei den if-else-Anweisungen.
|