Rheinwerk Design < openbook > Rheinwerk Design - Know-how für Kreative.
Know-how für Kreative

 << zurück
ActionScript 1 und 2 von Sascha Wolter (http://www.saschawolter.de/)
Objektorientierung und Codedesign mit Flash MX 2004
Buch: ActionScript 1 und 2

ActionScript 1 und 2
672 S., mit CD, Referenzkarte, 44,90 Euro
Rheinwerk Design
ISBN 3-89842-221-6
gp Kapitel 15 Movieclips
  gp 15.1 Eigenschaften
  gp 15.2 Fähigkeiten
    gp 15.2.1 Movieclip-Methoden
    gp 15.2.2 Zeichnungsmethoden
  gp 15.3 Selbst definierte Eigenschaften und Fähigkeiten
    gp 15.3.1 Eigenschaften einer Instanz hinzufügen
    gp 15.3.2 Eigenschaften in die Symboldefinition aufnehmen
    gp 15.3.3 Eigenschaften allen Movieclips hinzufügen
    gp 15.3.4 addProperty
    gp 15.3.5 Fähigkeiten als globale Funktion zur Verfügung stellen
    gp 15.3.6 Fähigkeiten einer Instanz hinzufügen
    gp 15.3.7 Fähigkeiten in die Symboldefinition aufnehmen
    gp 15.3.8 Fähigkeiten allen Movieclips hinzufügen
  gp 15.4 Nützliche Erweiterungen
    gp 15.4.1 Positionen auf der Bühne
    gp 15.4.2 Spiegeln
    gp 15.4.3 Bewegen
  gp 15.5 Neue Movieclip-Klassen
    gp 15.5.1 registerClass


Rheinwerk Design - Zum Seitenanfang

15.3 Selbst definierte Eigenschaften und Fähigkeiten  downtop

Da die Fähigkeiten und Eigenschaften eines Movieclips nicht immer ausreichen, bietet ActionScript auch die Möglichkeit, neue hinzuzufügen.


Rheinwerk Design - Zum Seitenanfang

15.3.1 Eigenschaften einer Instanz hinzufügen  downtop

Der einfachste Weg zu neuen Eigenschaften ist die konventionelle Definition von Variablen. Diese Variablen sind bezüglich einer Movieclip-Instanz nichts anderes als Eigenschaften – manchmal auch Instanzvariablen genannt!

Angenommen Sie programmieren Pokémon-Karten mit Hilfe von Movieclips (für die älteren unter Ihnen geht das auch mit einem Quartettspiel wie zum Beispiel »Die schnellsten Autos«). Jede dieser Karten beinhaltet eine Reihe von zusätzlichen Eigenschaften wie Typ, Größe und Gewicht, die Movieclips nicht von Natur aus besitzen. Für einzelne Instanzen definieren Sie die Eigenschaften, indem Sie diese der Instanz zuweisen:

// Definiere neue Eigenschaften einer Instanz von außerhalb
meinPokemon.name = "Bisasam";
meinPokemon.typ = "Pflanze/Gift";
meinPokemon.groesse = 0.7;
meinPokemon.gewicht = 6.9;

Rheinwerk Design - Zum Seitenanfang

15.3.2 Eigenschaften in die Symboldefinition aufnehmen  downtop

Damit Sie die Eigenschaften nicht für jede einzelne Instanz deklarieren müssen, platzieren Sie die Initialisierung im zugehörigen Movieclip-Symbol – vorzugsweise im ersten Bild. Der besseren Lesbarkeit wegen leitet das folgende Skript sämtliche Eigenschaften mit der Objektreferenz this ein – dies vermeidet außerdem Missverständnisse bezüglich der Gültigkeit von Eigenschaften:

// Definiere neue Eigenschaften innerhalb eines Symbols
this.name = "Bisasam";
this.typ = "Pflanze/Gift";
this.groesse = 0.7;
this.gewicht = 6.9;

Jede Instanz dieses Symbols wird somit von Begin an mit diesen Eigenschaften versorgt – einer individuellen Anpassung der Eigenschaftswerte jeder einzelnen Instanz steht natürlich nichts im Wege.


Rheinwerk Design - Zum Seitenanfang

15.3.3 Eigenschaften allen Movieclips hinzufügen  downtop

Sollen jedoch nicht nur ausgewählte, sondern alle Movieclips zusätzliche Eigenschaften erhalten, dann funktioniert das mit Hilfe des Prototypen des Movieclip-Objektes (MovieClip.prototype). Die Eigenschaften dieses Prototypen gelten für alle mit ihm verbundenen Instanzen, also in diesem Fall für alle Movieclip-Instanzen. Bei einer Veränderung der Eigenschaft wird diese außerdem automatisch direkt der Instanz zugewiesen, was Seiteneffekte mit anderen Instanzen vermeidet:

// Definiere neue Eigenschaften einer Instanz innerhalb
MovieClip.prototype.name = "Bisasam";
MovieClip.prototype.typ = "Pflanze/Gift";
MovieClip.prototype.groesse = 0.7;
MovieClip.prototype.gewicht = 6.9;

Rheinwerk Design - Zum Seitenanfang

15.3.4 addProperty  downtop

Falls eine Eigenschaft mit Funktionalität gekoppelt sein soll, dann bietet sich die Methode addProperty des Object-Objektes an. Diese Methode steht für alle Objekte in Flash zur Verfügung, da grundsätzlich alle Objekte die Eigenschaften und Fähigkeiten vom Object-Objekt übernehmen! Die Methode addProperty erfordert als Parameter den Namen der Eigenschaft und eine Funktion zum Ermitteln (getter) sowie eine Funktion zum Setzen (setter) der Eigenschaft.

// getter
brightness.fla
function ermittleHelligkeit() {
   var farbInstanz = new Color(this);
   var transformationsInstanz = farbInstanz.getTransform();
   trace("bla:"+transformationsInstanz.rb);
   var helligkeit = 
    (transformationsInstanz.rb+transformationsInstanz.rb+transformationsInstanz.bb)/3;
   var helligkeitInProzent = helligkeit/2.56;
   return helligkeitInProzent;
}
// setter
function setzeHelligkeit(helligkeitInProzent) {
   var farbInstanz = new Color(this);
   var helligkeit = 2.56*helligkeitInProzent;
   var transformationsInstanz = new Object();
   transformationsInstanz.rb = helligkeit;
   transformationsInstanz.gb = helligkeit;
   transformationsInstanz.bb = helligkeit;
   new Color(this).setTransform(transformationsInstanz);
}
// Registriere die Eigenschaft
var success=meineMovieClipInstanz.addProperty("_brightness",
ermittleHelligkeit, setzeHelligkeit);
trace("Neue Eigenschaft registriert: " + success);
// Teste die Eigenschaft
meineMovieClipInstanz._brightness=50;
trace(meineMovieClipInstanz._brightness);

Um eine schreibgeschützte Eigenschaft zu erhalten, geben Sie anstelle der Setter-Funktion null als Parameter an:

// Getter
distance.fla
function ermittleAbstand() {
   var point = new Object();
   point.x = this._x;
   point.y = this._y;
   this._parent.localToGlobal(point);
   var distance = Math.sqrt(point.x*point.x+point.y*point.y);
   return distance;
}
// Registriere die Eigenschaft
meineMovieClipInstanz.addProperty("_distance", ermittleAbstand, null);
// Teste die Eigenschaft
trace(meineMovieClipInstanz._distance);

Natürlich ist es wie schon bei den normalen Eigenschaften möglich, die Definition innerhalb eines Movieclip-Symbols oder gleich für alle Movieclips durchzuführen. Achten Sie nur darauf, dass die Getter- und Setter-Funktionen so definiert sind, dass Flash sie findet; Bei einer Registrierung der Eigenschaft im Prototypen bietet sich zum Beispiel derselbe Ort für die Funktionen an:

// Getter
MovieClip.prototype.ermittleHelligkeit = function() {
   var farbInstanz = new Color(this);
   var transformationsInstanz = farbInstanz.getTransform();
   var helligkeit = 
     (transformationsInstanz.rb+transformationsInstanz.rb+transformationsInstanz.bb)/3;
   var helligkeitInProzent = helligkeit/2.56;
   return helligkeitInProzent;
}
// Setter
MovieClip.prototype.setzeHelligkeit= function (helligkeitInProzent) {
   var farbInstanz = new Color(this);
   var helligkeit = 2.56*helligkeitInProzent;
   var transformationsInstanz = new Object();
   transformationsInstanz.rb = helligkeit;
   transformationsInstanz.gb = helligkeit;
   transformationsInstanz.bb = helligkeit;
   new Color(this).setTransform(transformationsInstanz);
}
// Registriere die Eigenschaft
MovieClip.prototype.addProperty("_brightness", 
MovieClip.prototype.ermittleHelligkeit, 
MovieClip.prototype.setzeHelligkeit);
// Teste die Eigenschaft
meineMovieClipInstanz._brightness=50;
trace(meineMovieClipInstanz._brightness);

Rheinwerk Design - Zum Seitenanfang

15.3.5 Fähigkeiten als globale Funktion zur Verfügung stellen  downtop

Reichen die Fähigkeiten von Movieclips einmal nicht aus, dann fassen Sie eine Folge von Anweisungen als neue Methode zusammen. Der einfachste, aber zugleich auch unkomfortabelste Weg ist, dass Sie eine Funktion deklarieren, der Sie die Objektreferenz (also den Instanznamen inklusive Pfad) und die Parameter übergeben:

_global.hflip = function(obj) {
hflip.fla
   // Spiegele horizontal
   obj._xscale *= -1;
};
// Teste die Fähigkeit
hflip(meineMovieClipInstanz);

Rheinwerk Design - Zum Seitenanfang

15.3.6 Fähigkeiten einer Instanz hinzufügedowntop

Eleganter ist es hingegen, wenn Sie die Funktion wie eine Eigenschaft direkt in der Movieclip-Instanz als Methode definieren und anstelle des Parameters für die Objektreferenz this verwenden:

meineMovieClipInstanz.hflip = function() {
flip.fla
   // Spiegele horizontal
   this._xscale *= -1;
};
// Teste die Fähigkeit
meineMovieClipInstanz.hflip();

Rheinwerk Design - Zum Seitenanfang

15.3.7 Fähigkeiten in die Symboldefinition aufnehmedowntop

Um die Zuweisung der neuen Fähigkeit zu vereinfachen, platzieren Sie die Methode direkt in den zugehörigen Movieclip-Symbolen, wodurch die Methode allen Instanzen dieser Symbole bekannt ist. Auch an dieser Stelle ist es empfehlenswert, der Methodendefinition das this voranzustellen, um die Lesbarkeit des Programmcodes zu verbessern. Innerhalb der Methoden ist das this ohnehin notwendig, um den Bezug zur Instanz bei der Ausführung korrekt herzustellen:

this.hflip = function() {
   // Spiegele horizontal
   this._xscale *= -1;
};

Rheinwerk Design - Zum Seitenanfang

15.3.8 Fähigkeiten allen Movieclips hinzufügetoptop

Möchten Sie Fähigkeiten für alle Movieclips verfügbar machen, dann funktioniert das mit Hilfe des Prototypen des Movieclip-Objektes (MovieClip.prototype). Die Fähigkeiten dieses Prototypen gelten für alle mit ihm verbundenen Instanzen, also in diesem Fall für alle Movieclip-Instanzen:

MovieClip.prototype.hflip = function() {
   // Spiegele horizontal
   this._xscale *= -1;
};
// Teste die Fähigkeit
meineMovieClipInstanz.hflip();
 << zurück
  
  Zum Rheinwerk-Shop
Zum Rheinwerk-Shop: ActionScript 1 und 2
ActionScript 1 und 2
bestellen
 Ihre Meinung?
Wie hat Ihnen das Openbook gefallen?
Ihre Meinung

 Buchtipps
Zum Rheinwerk-Shop: JavaScript






 JavaScript


Zum Rheinwerk-Shop: jQuery






 jQuery


Zum Rheinwerk-Shop: Responsive Webdesign






 Responsive Webdesign


Zum Rheinwerk-Shop: Suchmaschinen-Optimierung






 Suchmaschinen-
 Optimierung


Zum Rheinwerk-Shop: Schrödinger lernt HTML5, CSS3 und JavaScript






 Schrödinger lernt
 HTML5, CSS3
 und JavaScript


 Lieferung
Versandkostenfrei bestellen in Deutschland, Österreich und der Schweiz
InfoInfo





Copyright © Rheinwerk Verlag 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.


Nutzungsbestimmungen | Datenschutz | Impressum

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de

Cookie-Einstellungen ändern