Anzeige
Tutorialbeschreibung

Funktionen in Flash Actionscript schreiben

Funktionen in Flash Actionscript schreiben

Version: ab Flash MX
Niveau: Einsteiger
Vorkenntnisse: Flash Grundlagen
Lernziele: Funktionstypen in Actionscript kennen lernen; eigene Funktionen einsetzen lernen 

Funktionen werden verwendet, um Aufgaben, die wiederholt ausgeführt werden müssen, in einem einzigen Befehlsblock zu erfassen. Dadurch wird ein Code übersichtlicher, weniger fehleranfällig, er läßt sich einfacher warten und problemlos (auch filmübergreifend) wieder verwenden. Ohne Funktionen müsste man jedesmal, wenn die entsprechenden Aufgaben ausgeführt werden sollen, die einzelnen Befehle einfügen. Mit einer Funktion reicht es, diese aufzurufen, und alle zugeordneten Befehle werden automatisch ausgeführt.

Eine Funktion definiert also einen Befehlsblock, der bei ihrem Aufruf ausgeführt wird. Der Befehlsblock kann dabei einen oder beliebig viele Befehle enthalten. Vor dem Einsatz einer Funktion muß zuerst eine Funktionsdefinition erfolgen. Sie ist auf zwei Arten möglich, die gleichwertig sind: 

function nameDerFunktion(){ 
          Befehl 1; 
          Befehl n;
}

Weniger üblich:

nameDerFunktion = function(){ 
          Befehl 1; 
          Befehl n;
}

Der Schlüsselbegriff function teilt Flash mit, daß die nachfolgenden, durch die geschweiften Klammern umschlossenen Ausdrücke eine Funktionsdefinition darstellen. Aufgerufen, d.h. ausgeführt wird die Funktion, indem man einfach ihren Namen schreibt:

nameDerFunktion();

Die runden Klammern sind beim Aufruf i.d.R. notwendig, um Flash mitzuteilen, es handle sich hier um eine Funktion. Darauf verzichten kann man, wenn die Funktion einem Ereignis zugewiesen wird.

Ein konkretes Beispiel wäre in einem Spiel die Ausgabe der erzielten Punkte, etwa nach jedem Abschuss eines gegnerischen Raumschiffs oder nach jeder Zerstörung eines Meteoriten. Zuerst muß die Funktion definiert werden:

function punkte(){ 
          score += 50; 
          to_score.text = score;
}

Aufgerufen wird die Funktion mit:

punkte();

Immer dann, wenn Flash auf diesen Aufruf trifft, werden alle Aktionen durchgeführt, die in der Funktionsdefinition enthalten sind: die Variable score wird um 50 erhöht und dessen Inhalt wird in das Textfeld to_score geschrieben, so daß der Spieler seinen aktuellen Punktestand erkennen kann. Da Actionscript zumindest in den meisten Fällen case sensitive ist, also zwischen Groß- und Kleinschreibung unterscheidet, darf die Schreibweise des Aufrufs nicht von dem Namen in der Funktionsdefinition abweichen.

Um die Zuweisung einer Funktion zu einem Ereignis zu testen, erstellen Sie zuerst einen Button mit dem Instanznamen „b_funktion“. Schreiben Sie anschließend folgendes Skript:

function ausgabe(){
trace(„Hallo Programmierer!“);
}
b_funktion.onPress = ausgabe;

 

Bilder


Beachten Sie, das hinter ausgabe diesmal keine runde Klammer stehen darf. Jedesmal, wenn Sie jetzt auf den Button klicken, werden Sie mit einem ebenso freundlichen wie schmeichelnden „Hallo Programmierer!“ begrüßt.

 

Bei beiden Beispielen handelt es sich um selbst definierte Funktionen. Deren Namensgebung muß sich an bestimmte Regeln halten:

  • Sonderzeichen, Leerzeichen und mathematische Operatoren sind nicht erlaubt. +zaehlen wäre also ein nicht gültiger Name.
  • Der Name darf nicht mit einer Zahl beginnen, kann aber ab dem zweiten Zeichen durchaus Zahlen enthalten. 2funktionen wäre falsch, function4everyone dagegen formal korrekt. In diesem und dem vorhergehden Fall gibt Flash eine Fehlermeldung bei Ausführen des Films aus, falls Sie die Regeln verletzen.
  • Entgegen der allgemeinen Vorstellung sind deutsche Umlaute zwar möglich, eine Funktion namens tüddeldü würde von Actionscript daher klaglos akzeptiert und ausgeführt. Damit gewöhnt man sich jedoch einen schlampigen Programmierstil an, denn spätestens bei der nächsten Skript- oder Programmiersprache funktioniert so etwas nicht mehr.
  • Der Name darf innerhalb des Gültigkeitsbereichs der Funktion nur einmal vorkommen. Was etwas unverständlich klingen mag, läßt sich am besten an einem Beispiel erklären: wenn Sie in der Szene 1 eine Variable oder ein Objekt namens ausgabe haben, dann dürfen Sie dort diesen Namen nicht mehr für eine Funktionsdefinition verwenden. Dagegen können Sie sehr wohl in einer anderen Zeitleiste und damit in einem anderen Gültigkeitsbereich den Namen ausgabe noch einmal verwenden. Verstoßen Sie gegen diese Regel, macht Flash (vermutlich aus Höflichkeit) irgend etwas, weist aber nicht auf Ihren Fehler hin.
  • Wählen Sie kurze, aussagekräftige Namen. So drückt der Name meineFunktion zwar berechtigten Schöpferstolz aus, trägt aber leider nicht zum Verständnis des Funktionsinhalts bei. Unter spielStart dagegen kann man sich schon mehr vorstellen.
  • Der Name darf nicht mit einem Schlüsselbegriff oder einem Bezeichner von Actionscript übereinstimmen. Hier hilft Ihnen die Syntaxfarbcodierung von Flash: sollte nämlich Ihr Funktionsname dunkelblau erstrahlen, dann müßten Sie innerlich zusammenzucken, weil Sie bei der verwerflichen Verwendung eines reservierten Begriffs ertappt wurden. So darf Ihre Funktion beispielsweise nicht trace heißen. Leider nimmt Flash einen derartigen Regelverstoß zumeist klaglos hin.

Dazu folgendes Beispiel: Erstellen Sie einen roten Kreis, wandeln ihn in einen MovieClip namens „mc_kreis“ um und geben ihm den Instanznamen „kreis“. Positionieren Sie ihn beliebig auf dem Screen.

Fügen Sie unterhalb des bisherigen Programmcodes als Warnung an alle, die da unbedacht an Actionscript herumfummeln wollen, eine Trennlinie ein:

//-------------Fehler------------

Danach schreiben Sie:

function Array(){ 
          kreis.onEnterFrame = function(){ 
                    this._x += 5; 
          }
}
Array(); 

Wenn Sie jetzt testen, bewegt sich der Kreis fein brav nach rechts. Als Programmierer würde man erwarten, daß einem das Nachrichtenfenster mit großer Empörung förmlich ins Gesicht springt. Denn der Bezeichner Array, also ein reservierter Begriff, wurde für einen Funktionsnamen mißbraucht. Gäbe es noch die Inquisition, müßte sie spätestens hier einschreiten!

(Lustigerweise läßt sich ab diesem Zeitpunkt Array nicht mehr als Klassenname ansprechen, der Versuch, mit beispielsweise aZahlen = new Array() ein neues Array anzulegen, scheitert kläglich am Einspruch von Flash - sorry, diesen Schwank können leider nur diejenigen verstehen, die sich bereits mit Arrays auskennen, was Thema eines späteren Workshops sein wird.)

Jetzt löschen Sie bitte wieder alle Zeilen ab der Fehlerkennzeichnung mit dem Kommentarzeichen.

Neben den selbst definierten Funktionen existieren auch vordefinierte Funktionen, von denen Sie mit trace() bereits eine kennen gelernt haben. Vordefinierte Funktionen sind einfach Befehle, die Ihnen Flash bereits zur Verfügung stellt, um bestimmte, häufig vorkommende Aufgaben zu vereinfachen wie etwa die Ausgabe von Informationen im Nachrichtenfenster.

Manche Funktionen wie unser punkte() benötigen zur Ausführung keine weiteren Informationen. Sie können also unmittelbar ausgeführt werden. Andere Funktionen dagegen sind auf zusätzliche Daten angewiesen, um korrekt aufgerufen zu werden. In diesem Fall übergibt man in der runden Klammer die zusätzlichen Informationen in Form von Parametern. Unter einem Parameter ist schlicht ein Datenbehälter zu verstehen, in den wir beim Aufruf der Funktion die benötigten Informationen hinein packen.

Mit einer derartigen Funktion haben Sie bereits gearbeitet: trace() benötigt nämlich in der Klammer eine Angabe darüber, was konkret im Nachrichtenfenster ausgegeben werden soll.

Fügen Sie am Ende des bisherigen Skripts folgende Zeile ein und testen Sie:

trace();

Flash wird bei der Ausführung den Fehler ausgeben, daß die falsche Anzahl an Parametern angegeben wurde. Trace erfordert genau eine Information in der Klammer.

Korrigieren Sie wie folgt:

trace(„Dieser Parameter wird ausgegeben“);

Jetzt funktioniert das Skript korrekt. Welche Anzahl an Parametern bei vordefinierten Funktionen notwendig ist, wird über die Syntaxhilfe beim Setzen der öffnenden Klammer automatisch angezeigt und kann in der Hilfe von Flash (Fenster Hilfe - Actionscriptlexikon) eingesehen werden.

Natürlich können auch selbst definierte Funktionen mit Parametern arbeiten; sie müssen lediglich in die Funktionsdefinition aufgenommen werden.

Schreiben Sie nach dem bisherigen Code:

function aphorismus(satz1,satz2,autor){ 
          trace(satz1); 
          trace(satz2) ; 
          trace(autor) ; 
          trace( “-------“ ) ;
}

aphorismus(„Der Politiker ist ein Akrobat.“,“Er hält das Gleichgewicht dadurch, n daß er das Gegenteil von dem,nwas er tut, sagt“, „Bierce“);

Bilder


Beim Ausführen ersetzt Flash überall dort, wo in der Funktionsdefinition satz1 steht, durch den ersten Text in der Klammer, hier: „Der Politiker ist ein Akrobat.“. Aus satz2 wird „Er hält …“ und autor entspricht „Bierce“. Der konkrete Inhalt spielt für Flash keine Rolle; entscheidend ist nur, an welcher Stelle innerhalb der Klammer etwas steht. Da zum Beispiel „Bierce“ im Aufruf an dritter Stelle steht, wird es in der Funktionsdefinition in den dritten Parameter, also in autor hineingeschrieben. Das n bewirkt in der Textausgabe einen Zeilenumbruch. Die letzte Zeile dient lediglich der besseren Lesbarkeit des Textes.

Fügen Sie unter den bisherigen Funktionsaufruf einen weiteren Aufruf ein, aber mit anderen Parametern, z.B.:

aphorismus(„Was haben Pantoffel und Minister oft gemeinsam?“,“Man gewinnt sie oft erst lieb,nwenn sie abgetreten sind!“,“M. G. Saphir“);

Bilder


Dieselbe Funktion gibt trotz unveränderter Funktionsdefinition zwei völlig verschiedene Texte aus. Denn die Parameter sind lediglich Platzhalter, die erst im Augenblick des Aufrufs mit konkreten Inhalten gefüllt werden. Darin besteht die außerordentlich hohe Flexibilität derartiger Funktionen.

Besondere Funktionen können darüber hinaus einen Wert zurückgeben.

Schreiben Sie:

function berechnung(zahl1, zahl2){ 
          return zahl1 + zahl2;
}
berechnung(5,7);

Wenn Sie jetzt testen, können Sie keine Veränderung gegenüber vorher feststellen, trotz korrekter Definition und des Aufrufs der Funktion. Der Grund liegt im Schlüsselwort return. Es weist Flash an, das Ergebnis der Addition des ersten und des zweiten Paranmeters an die aufrufende Stelle zurückzugeben. Gewisserweise steckt also in berechnung(5,7) nach Ausführen der Funktion das Ergebnis der Addition.

Korrigieren Sie daher den Aufruf:

trace(berechnung(5,7));

Bilder


Jetzt wird im Nachrichtenfenster das Ergebnis 12 angezeigt. Nach return gilt die Funktion als abgeschlossen, d.h., Anweisungen, die danach in der Funktionsdefinition enthalten sind, werden ignoriert.

Sie können dies testen, indem Sie nach return und vor der abschließenden, geschweiften Klammer auf trabatonisch schreiben:

trace(„habefertisch!“);

Das eingefügte trace wird von Flash übergangen, da die Funktion mit return abbricht. Verschieben Sie dagegen das trace vor die return-Zeile, erscheint die Nachricht im Ausgabefenster.

Meistens wird von Funktionen, gelegentlich aber auch von Methoden gesprochen. Eine Methode ist eine Funktion, die einem Objekt zugeordnet ist, im Gegensatz zu einer Funktion, die alleine für sich steht (zumindest von der Syntax her). Die Methode ermöglicht es, entweder mit einem Objekt zu kommunizieren oder auf seine Eigenschaften zuzugreifen (auslesen, setzen, ändern). So stellt trace eine Funktion dar, während movieClip.attachMovie eine Methode ist. Also immer dann, wenn der Befehlsaufruf durch einen Punkt auf ein Objekt verweist, handelt es sich streng genommen um eine Methode. Tatsächlich ist diese Unterscheidung in Flash eher akademischer Natur, denn die Ausführung der betreffenden Befehle unterscheidet sich bei Methoden und Funktionen nicht voneinander.

Ähnlich verhält es sich mit dem Begriff der Prozedur. Rein theoretisch bezieht sich die Prozedur auf Operationen, die der Rechner für Sie ausführt (z.B. trace), während die Funktion etwas berechnet (z.B. eine Addition). In der Flash-Praxis trifft aber niemand diese Unterscheidung. Auch weitere Unterscheidungen wie pure oder nebeneffektfreie Funktionen gibt es zwar in Flash, werden aber nicht weiter berücksichtigt.

In diesem Workshop wurde aus Gründen der Vereinfachung zumeist von Funktionen und Methoden gesprochen, ohne weiter zu differenzieren.

Sorry für das viele trockene Holz, aber ich hoffe, es ist einigermaßen verständlich geworden, worum es sich bei Funktionen handelt.


DVD-Werbung
Kommentare
Achtung: Du kannst den Inhalt erst nach dem Login kommentieren.
Portrait von gundleyG
  • 30.12.2010 - 04:14

ju - die Grundlagen werden klar - leider sind die Beispiele nicht alle nachvollziehbar - ich hätte mir gewünscht, für den Punkte-Zähler mehr Informationen zu bekommen, wie er realisiert wird.

Dennoch soweit - so klar.

Portrait von DessIntress
  • 16.12.2010 - 00:13

spitze gemacht, ich mags wenn es so ausführlich bebildert ist

Portrait von WebDiver_09
  • 29.08.2010 - 17:26

Super-Klasse Tut.!
Wenn man sieht wie sich sonst so ein paar Spezies mit dürren Worten und wenig Inhalt Punkte ermogeln wollen (z.B. bei „Passwort-Abfrage mit Flash“ bloss nicht öffnen, sind gleich 3 Punkte weg für nix!)

Alternative Portrait

-versteckt-(Autor hat Seite verlassen)

  • 23.06.2010 - 12:40

klasse tut daumen hoch

Portrait von mistajam
  • 30.04.2010 - 03:35

Super :) ....danach hatte ich gesucht :) Gut erklärt

Portrait von SonnyCrocket
  • 22.05.2009 - 18:00

Super Erklörung für Einsteiger wie mich. Und dann auch noch humorvoll rübergebracht. Daumen hoch!

Alternative Portrait

-versteckt-(Autor hat Seite verlassen)

  • 22.04.2009 - 22:04

hat mir echt geholfen.Hast echt gut erklärt weiter so.

Portrait von the_hangman
  • 15.03.2009 - 18:53

echt gut für Einsteiger geeignet.

Alternative Portrait

-versteckt-(Autor hat Seite verlassen)

  • 20.11.2008 - 23:36

Ein sehr verständliches Tutorial!

Portrait von MelZu
  • 30.10.2008 - 08:16

Danke für die guten Erklärungen.

Portrait von Vintage
  • 23.04.2008 - 20:35

danke danke, das hat mir sehr viel weiter geholfen^^ bin noch einsteiger xD

Portrait von h_seldon
  • 15.04.2008 - 09:48

Mist, muss mich selber in den Allerwertesten beißen: Da das Tut in Word entstanden ist und per copy and paste eingefügt wurde, tauchen jetzt natürlich auch die blöden Anführungszeichen für alle Strings dort auf, während sie auf den Bildern korrekt wieder gegeben werden. Autsch, und das Beißen ist auch gar nicht so einfach wie es hier klingt!<br>
<br>
Trotzdem viel Spaß

Alternative Portrait

-versteckt-(Autor hat Seite verlassen)

  • 14.04.2008 - 13:29

bei mir scheiterts schon beim ersten befehl:

function ausgabe(){
trace(„Hallo Programmierer!“);
}
b_funktion.onPress = ausgabe;

flash gibt mir 2 fehler vor:

**Fehler** Szene=Szene 1, Ebene=Ebene 1, Bild=1:Zeile 1: '(' erwartet
function ausgabe {

**Fehler** Szene=Szene 1, Ebene=Ebene 1, Bild=1:Zeile 4: Syntaxfehler.
butt.onPress = ausgabe);

Anzahl der ActionScript-Fehler: 2 Gemeldete Fehler: 2


keine ahnung was das soll aber weitere befähle lässt er nicht ehr zu!
also scheiße!

Portrait von h_seldon
  • 15.04.2008 - 09:42

Sniff, in den letzten beiden Worten drückt sich eine unerwartet emotionale Reaktion aus, die traurig stimmt. Da hilft vielleicht folgendes:<br>
<br>
- Flash ist offenbar unzufrieden mit den Gänsefüßchen (heißen die Dinger wirklich so?), die den String "Hallo Programmierer!" in Deinem Beispiel zieren. Verwende einfache oder doppelte Hochkommata (mein Gott, ist das jetzt der Deppenapostroph, den ich da empfehle? Ich meine halt einfach die doppelten Dinger, die vor dem String in der Luft schweben, bloß nicht die auf dem Boden, oder so ähnlich).<br>
<br>
- In der zweiten Fehlermeldung hat sich offenbar eine schließende Klammer hinter butt.onPress = ausgabe) eingeschlichen, die da nichts verloren hat.<br>
<br>
Es wäre hilfreich, wenn Du Dein komplettes Skript angeben würdest, so dass man erkennen könnte, was denn da so beschissen daherkommt.<br>
<br>
Viel Spaß

Alternative Portrait

-versteckt-(Autor hat Seite verlassen)

  • 26.10.2007 - 17:53

gute einführung! danke....

Portrait von master_x
  • 23.10.2007 - 17:55

Sehr Gut ,und 0% verrwirrend.ist besser erklärt als in mein Buch ,die ich gerade lese...:)
Danke
P.S. ein Tut von dir über ObJekte und Klassen wäre megaSuper...

Portrait von golfer69
  • 03.05.2007 - 06:52

Perfekt erklärt und sehr leicht verständlich! Weiter so!

Portrait von maSuL
  • 09.04.2007 - 05:03

super en einz ist echt krass genial super duper oberkrass alllltteerrr hehehehehehe danke dir für dieses tut ist ect nice

Portrait von blackice2999
  • 30.03.2007 - 20:25

DANKE !!! Auch wenn ich festellen musste, das ich mich bisher bei der Deklaration von Funktionen auf die eher unübliche Variante eingefuchst hatte... mal schauen welche ich weiterhin verwenden werde.

Alternative Portrait

-versteckt-(Autor hat Seite verlassen)

  • 16.03.2007 - 10:46

Sehr hilfreich! Danke

x
×
×