![]() |
![]() |
|
02_Programmierung\TabelleLegen Sie ein Movieclip-Symbol an, und verknüpfen Sie dieses in der Bibliothek mit einem Namen wie z.B. »monster«. Die Verknüpfung (engl. Linkage) legen Sie in der Bibliothek über die Verknüpfungseigenschaften eines Symbols fest.
Abbildung 9.1 Ein Raster aus Objekten
Erstellen Sie im ersten Schlüsselbild der Hauptzeitleiste die Funktion in der folgenden Form: function createGrid(linkage, itemsCount, columnsCount) {
// Movieclip-Instanz
var item_mc;
// horizontale Schrittweite
var hspace = 80;
// vertikale Schrittweite
var vspace = 80;
// Zähler
var i;
// Erzeuge Gitter
for (i=0; i<itemsCount; i++) {
item_mc = _root.attachMovie(linkage, "item"+String(i), i);
// Berechne Spalte mit Modulo
item_mc._x = (i%columnsCount)*hspace;
// Berechne Zeile
item_mc._y = Math.floor(i/columnsCount)*vspace;
}
}
Um die Funktion nun nutzen zu können, reicht es aus, diese mit den passenden Parametern aufzurufen: createGrid("monster", 20, 6); TypsicherDas vorhergehende Beispiel kommt ohne Typisierung aus, was jedoch bei komplexeren Projekten zu Problemen führen kann. Aus diesem Grund ist die folgende Funktion mit Typangaben der Version aus dem Beispiel vorzuziehen: 02_Programmierung\Tabelle mit Modulofunction createGrid(linkage:String, itemsCount:Number,
columnsCount:Number):Void {
// Movieclip-Instanz
var item_mc:MovieClip;
// horizontale Schrittweite
var hspace:Number = 80;
// vertikale Schrittweite
var vspace:Number = 80;
// Zähler
var i:Number;
// Erzeuge Gitter
for (i=0; i<itemsCount; i++) {
item_mc = _root.attachMovie(linkage, "item"+String(i), i);
// Berechne Spalte mit Modulo
item_mc._x = (i%columnsCount)*hspace;
// Berechne Zeile
item_mc._y = Math.floor(i/columnsCount)*vspace;
}
}
9.2.4 arguments-Array
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 1. | Erstellen Sie die Funktion |
Die folgende Funktion für den Größenvergleich zweier Movieclips gibt den größeren Movieclip für die weitere Verwendung als Ergebnis zurück:
function maxMovieclip(a_mc, b_mc) {
var a_size = a_mc._width*a_mc._height;
var b_size = b_mc._width*b_mc._height;
if (a_size>b_size) {
return a_mc;
} else {
return b_mc;
}
}
| 2. | Verwenden Sie die Funktion |
Um die Funktion zu verwenden, können Sie diese ganz normal aufrufen und bei Bedarf das Ergebnis sogar in einer Variablen ablegen:
max_mc = maxMovieclip(castle_mc, house_mc); max_mc._alpha = 50;
Alternativ könnten Sie aber auch die Funktion direkt als Platzhalter für den größeren Movieclip einsetzen:
maxMovieclip(castle_mc, house_mc)._alpha = 50;
Die Ausführung einer return-Anweisung beendet eine Funktion auch dann, wenn noch weitere Anweisungen folgen würden. Deshalb ist ein return auch sehr beliebt, um Funktionsausführungen frühzeitig abzubrechen:
function onEnterFrame() {
if (mc._x>550) {
return;
}
mc._x += 10;
}
Funktionen können sich auch hinter Eigenschaften verbergen. Dies wird oft dann benötigt, wenn eine Eigenschaft Verwendung findet, deren Wert jedoch wie bei einer Funktion berechnet werden muss. Dies erreichen Sie in ActionScript 1 über die für alle Objekte verfügbare Methode addProperty. Mehr Informationen zu Getter-/Setter-Funktionen erhalten Sie im Zusammenhang mit ActionScript 2.0, wo dies deutlich einfacher erstellt werden kann.
Nicht immer müssen Funktionen einen Namen tragen. In diesem Fall spricht man dann auch von einer anonymen Funktion. Oft kommt dieses Konzept zum Einsatz, wenn eine Funktion als Parameter übergeben wird (denn eine Funktion ist auch nichts anderes als ein Objekt und kann genauso wie ein Objekt verwendet werden).
Das Array-Objekt bietet z.B. eine Sortierfunktion, die als Parameter eine Funktion erhalten darf:
| 1. | Erstellen Sie eine Liste |
Erstellen Sie eine Liste mit Elementen, die sortiert werden sollen:
liste = ["a", "e", "d", "c", "b"];
| 2. | Sortieren Sie die Liste umgekehrt |
Sortieren Sie die Liste mit den Elementen, in dem Sie die sort-Methode aufrufen und dieser eine Funktion für das umgekehrte Sortieren übergeben:
liste.sort(function (a, b) {return (a<b);});
Anonyme Funktionen haben neben der Übergabe als Parameter noch einen weiteren Einsatzzweck. Denn mit Hilfe anonymer Funktionen kann eine Funktion einem beliebigen Objekt als Methode zugewiesen werden. Die »normale« Funktionsdeklaration erlaubt nämlich nur die Angabe eines Bezeichners und nicht eines kompletten Pfades zu einem Objekt. Die folgende Funktion ist deshalb nicht erlaubt und erzeugt einen Fehler:
function box_mx.shrink () {
_xscale = _xscale/2;
_yscale = _yscale/2;
}
Aus diesem Grund bietet es sich an, einer beliebigen Eigenschaft eines Objektes einfach eine anonyme Funktion zuzuordnen:
box_mx.shrink = function () {
_xscale = _xscale/2;
_yscale = _yscale/2;
}
Eine Besonderheit der Inline-Schreibweise ist, dass die Funktion erst von dem Zeitpunkt an zur Verfügung steht, ab dem sie erstellt wurde. Dies ist anders als bei normalen Funktionen, die unabhängig von ihrer Position in einem Skript von Anfang an bereitstehen:
// tut nichts, da vor der Deklaration
tuwas();
// Inline-Schreibweise
tuwas = function () {
trace("tut was");
};
// tut was
tuwas();
Ebenfalls sehr beliebt ist es, eine Funktion auf die herkömmliche Weise zu deklarieren und diese dann nachträglich einem Objekt zuzuweisen:
function shrink () {
_xscale = _xscale/2;
_yscale = _yscale/2;
}
box_mx.shrink = shrink;
Diese Variante hat jedoch den Nachteil, dass es dann zwei Referenzen auf die Funktion gibt (die in der Zeitleiste platzierte Referenz und die in dem Objekt definierte Eigenschaft).
Jede Funktion ist gleichzeitig ein Objekt und besitzt somit ähnliche Fähigkeiten wie ein Objekt. Erst wenn diese Art von Objekt mit nachfolgenden Klammern aufgerufen wird, versucht Flash, dieses Objekt als Funktion auszuführen. D.h. auch einer Funktion kann eine Eigenschaft oder eine Methode zugeordnet werden.
Eine vordefinierte Eigenschaft aller Funktionen ist prototype. Diese Eigenschaft wird für die objektorientierte Programmierung benötigt. Zu den vordefinierten Methoden zählt toString(), die eine Funktion in eine Zeichenkette umwandelt (normalerweise ist das Ergebnis von funktion.toString(); die Zeichenkette "[type Function]").
Weitere Methoden jeder Funktion sind call(); und apply();. Diese erlauben es, eine Funktion in einem anderen Kontext zu verwenden. So können die Anweisungen innerhalb der Funktion über das Schlüsselwort this auf diesen neuen Kontext zugreifen.
function shrink() {
this._xscale = this._xscale/2; this._yscale = this._yscale/2; } // Verkleinere die Anwendung shrink(); // Verkleinere den Movieclip // (ändere die Referenz this in der Funktion von der Hauptzeitleiste auf box_mc) shrink.call(box_mc); shrink.apply(box_mc);
Die beiden Methoden unterscheiden sich sonst nur durch die Art und Weise, wie weitere Parameter anzugeben sind, die an die Funktion gesendet werden. Bei call legen Sie die Parameter durch Kommata getrennt fest, bei apply fügen Sie ein Array an:
function move(x, y) {
this._x = this._x+x;
this._y = this._y+y;
}
// Bewege den Movieclip
move.call(box_mc, 10, 10);
move.apply(box_mc, [10, 10]);
Das Funktionsobjekt ist in der Datei Function.as innerhalb des classes-Ordners im Konfigurationsverzeichnis von Flash definiert.
| << zurück |
|
||||||||||||||
|
||||||||||||||
|
||||||||||||||
|
||||||||||||||
Copyright © Galileo Press GmbH 2005
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.