Wenn Sie die folgenden Beispiele nicht nachvollziehen können, schauen Sie sich erst folgende Info an.
Funktionen sind ein Grundelement in Programmiersprachen. Sie werden benötigt, um mehrere Anweisungen zusammenzufassen. Durch Aufruf der Funktion werden alle Anweisungen, die in der Funktion definiert sind, ausgeführt.
Beispiel:
function stopAni():void { stop(); blinklicht.visible = false; } function playAni():void { play(); blinklicht.visible = true; }
Im obigen Beispiel wurden 2 Funktionen definiert. In der ersten Funktion namens stopAni() wird die Zeitleiste gestoppt und ein MC mit Instanznamen blinklicht wird unsichtbar.
In der zweiten Funktion spielt die Zeitleist ab und der MC blinklicht wird wieder auf visible (sichtbar) gesetzt.
Man ruft die erste Funktion folgendermaßen auf:
stopAni();
Alle Anweisungen, die zwischen den geschweiften Klammern stehen werden ausgeführt. Die geschweiften Klammern stehen grundsätzlich für einen Anweisungsblock.
Die Anweisungen müssen in einzelnen Zeilen stehen und enden mit einem Semikolon.
:void
Hinter den Klammern der Funktion steht der Datentyp des Rückgabewertes einer Funktion. Wenn die Funktion keinen Rückgabewert hat wird :void eingegeben.
In den Klammern einer Funktion kann man Argumente definieren. Ein Argument ist eine Variable, die innerhalb der Funktion genutzt wird. Die Wertzuweisung des Arguments erfolgt beim Aufruf der Funktion.
function setMcSize(size:Number):void { myMc.width = size; myMc.scaleY = blinklicht.scaleX; }
Aufruf der Funktion
setMcSize(40);
Man kann auch mehrere Argumente definieren. Diese werden mit Kommata getrennt aufgeführt. Die Werte müssen beim Aufruf der Funktion in gleicher Reihenfolge zugewiesen werden.
function setMcSize(breite:Number, hoehe:Number):void { myMc.width = breite; myMc.height = hoehe; }
Aufruf der Funktion
setMcSize(40, 100);
Man kann auch Argumente mit einem vorgegebenen Wert definieren. Dann hat man beim Aufruf der Funktion die Wahl diesem Argument einen Wert zuzuweisen oder auf die Wertzuweisung zu verzichten. Im letzteren Fall wird der vorgegebene Wert eingesetzt.
function setMcSize(breite:Number=20):void { myMc.width = breite; }
Aufruf der Funktion ohne Wertzuweisung
setMcSize();
Hat man mehrere Argumente müssen die Argumente mit vorgebenen Wert logischerweise am Ende der Argumente aufgeführt werden oder anders ausgedrückt nach einem Argument mit Standardwert dürfen keine weiteren Argumente ohne Standardwert folgen.
function setMcSize(hoehe:Number, breite:Number=20):void { myMc.width = breite; myMc.height = hoehe; }
Eine Funktion kann einen Rückgabewert haben. Der Datentyp des Rückgabewertes wird hinter der Klammer aufgeführt. Der Rückgabewert wird mittels return am Ende der Funktion zurückgegeben.
function addiere(z1:Number, z2:Number):Number { var addition:Number = z1 + z2; return addition; }
Da diese Funktion einen Datentyp zurückgibt reicht es nicht aus, diese Funktion einfach aufzurufen, sondern der Datentyp muss irgendeiner Variable oder Eigenschaft zugewiesen werden:
myMc.width = addiere(30, 50);
oder
var myVar:Number = addiere(45, 34);
Im folgenden Beispiel gibt die Funktion eine Textfeld Instanz zurück:
import flash.text.TextField; var myTf:TextField = createCustomTextField(0,50,200,20); myTf.text = "Hier wird etwas Text hinzugefügt"; function createCustomTextField (x:Number, y:Number, width:Number, height:Number):TextField { var result:TextField = new TextField(); result.x = x; result.y = y; result.width = width; result.height = height; addChild (result); return result; }
Im folgenden Beispiel liefert die Funktion mehrere Rückgabewerte.
function hex2rgb(value:uint):Object { var rgb:Object = new Object(); rgb.r = (value >> 16) & 0xFF; rgb.g = (value >> 8) & 0xFF; rgb.b = value & 0xFF; return rgb; } var col:Object = hex2rgb(0xA2F450); trace(col.r);//162 trace(col.g);//244 trace(col.b);//80
Variablen, die in einer Funktion deklariert wurden, haben nur innerhalb der Funktion Gültigkeit. Variablen, die außerhalb einer Funktion deklariert wurden haben innerhalb der Zeitleiste oder Klasse ihre Gültigkeit. Der Compiler verschiebt Variablendeklarationen an den Anfang, aber nicht Wertzuweisungen in Variablen.
Wenn man Variable außerhalb einer Funktion definiert und innerhalb der Funktion eine Variable gleichen Namens definiert. So existiert die globale Variable innerhalb der Funktion überhaupt nicht. In AS2 war das anders, da wurde die globale Variable erst überschrieben, wenn die lokale Variable erzeugt oder ihr ein Wert zugewiesen wurde. Folgende Beispiele verdeutlichen den Sachverhalt:
Actionscript | Ausgabe | Erklärung |
---|---|---|
var a:Number =10; |
10 | Die "globale" Variable a hat auch innerhalb der Funktion Gültigkeit. |
function myFunc(){ var a:Number=20; } myFunc(); trace (a); |
die lokale Variable hat außerhalb der Funktion keine Gültigkeit. | |
var b:Number; function myFunc(){ var a:Number=20; b=a; } myFunc(); trace (b); |
20 | Hier wurde der "globalen" Variablen b der Wert der lokalen Variablen a zugewiesen. |
var a:Number =10; |
NaN |
Die "globale" Variable a existiert in der Funktion überhaupt nicht, weil es innerhalb der Funktion eine lokale Variable gleichen Namens gibt. Die erste trace-Anweisung gibt NaN aus (not a number), |
Rekursiv bedeutet etwas ruft sich selbst auf. Hierzu sind zwar normalerweise die Schleifen da, aber es kann auch nützlich sein eine rekursive Funktion zu schreiben.
function meineSchleife(i:Number){
if(i<9){
trace(i);
meineSchleife(++i);
}
}
meineSchleife(1);
Wichitig ist hier die Zeile
meineSchleife(++i);
Wenn die Inkrement Anweisung vor der Variablen steht, gilt sie für die gesamte Anweisung. Sie wird also vor dem erneuten Funktionsaufruf um 1 erhöht.
Siehe hierzu das Thema AS2 / Variablen/ Inkrement Dekrement
Hier ein paar Beispiele mit Funktionen die Zufallswerte und zufällige Punkte innerhalb eines Rasters erzeugen.
Im folgenden Beispiel wechselt beim jedem Funktionsaufruf der boolsche Wert einer Variablen zum jeweils gegenteiligen Wert. Das kann man auch für die Eigenschaft visible einsetzen.
myMc.visible = !myMc.visible;
var drawMode:Boolean = false; draw_btn.addEventListener(MouseEvent.MOUSE_UP, setDrawMode); function setDrawMode(evt:MouseEvent):void { drawMode = ! drawMode; }
Anonyme Funktionen haben keinen Funktionsnamen. Diese kann man beispielsweise in EventListenern gut einsetzen.
mc.addEventListener(MouseEvent.CLICK, function(evt:MouseEvent):void { mc.x = 20; } )
Anstatt des Funktionsaufrufs setzt man die komplette Funktion ohne Namen ein.
function(evt:Event):void{Anweisung;}
Erzeuge einen Movieclip, ziehe eine Instanz auf die Bühne. Wähle sie aus und vergebe ihr im Eigenschaftenfenster einen Instanznamen. (keine Leerzeichen, nicht mit einer Zahl beginnen, keine Sonderzeichen außer dem Unterstrich sind erlaubt).
Ein Movieclip hat viele Eigenschaften ich führe hier die wichtigsten auf:
x horizontale Position in Pixeln
y vertikale Position in Pixeln
width Breite
height Höhe
scaleX Breite in Prozent von 0 bis 1
scaleY Höhe in Prozent von 0 bis 1
alpha Transparenz von 0 bis 1
visible Sichtbarkeit, boolscher Wert true oder false
mouseX horizontale Mausabstand zum Registrierpunkt des MCs
mouseY vertikaler Mausabstand zum Registrierpunkt des MCs
Diese Eigenschaften kann man zuweisen oder abfragen. Sie werden mit Punktsyntax an den Instanznamen angehängt z.B.:
meinMc.width = 12;
setzt die Breite der MC-Instanz namens meinMc auf 12 Pixel.
trace(meinMc.width);
gibt die Breite der MC-Instanz namen meinMc im Ausgabefenster aus.
function stopAni():void { stop(); blinklicht.visible = false; } function playAni():void { play(); blinklicht.visible = true; }