Zurück   Flashforum > Aktuelles > Tutorials > Flash Tutorials

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 23-05-2004, 11:32   #1 (permalink)
[Matthias K.] - Moderator
 
Benutzerbild von Madokan
 
Registriert seit: Jun 2001
Ort: Berlin/Germany - and the hole World !
Beiträge: 9.971
Post Einsatz des prototype-Objekts in Flash MX 2004

Einsatz des prototype-Objekts in Flash MX 2004

Hi Folks,

Hier mal ein kurzes und bündiges Tutorial zum Thema Einsatz des prototype-Objekts (Fallbeispiel: MovieClip.prototype) in Flash MX 2004. Was gilt es beim Einsatz zu beachten!

Fallbeispiel (MovieClip.prototype)
ActionScript:
  1. MovieClip.prototype.wabbern = function(x_end, y_end, multiplikator, ratio) {   
  2.         // Initialisierung
  3.         if (this.sX == undefined) this.sX = 0;
  4.         if (this.sY == undefined) this.sY = 0;   
  5.                    
  6.         // Berechnung
  7.         this.sX = this.sX*multiplikator+(x_end-this._xscale)*ratio;
  8.         this.sY = this.sY*multiplikator+(y_end-this._yscale)*ratio;
  9.        
  10.         // Umsetzung auf den jeweils betroffene MovieClip-Instanz
  11.         this._xscale += this.sX;
  12.         this._yscale += this.sY;       
  13. };
  14.  
  15. // Ausführung
  16. this.onEnterFrame = function() {
  17.     mc.wabbern(200,200,0.8,0.7);
  18. }


1. Schreibweise movieclip - ist Syntaktisch nicht korrekt. Es muss, wie folgt lauten: MovieClip. In Flash 5 und MX war dies noch egal - in MX 2004 nicht!

ActionScript:
  1. // In Flash 5 und MX (Funktionsfähige Schreibweisen)
  2. movieclip
  3. MovieClip
  4. Movieclip
  5.  
  6. // In Flash MX 2004 (Funktionsfähige schreibweise)
  7. MovieClip


2. Initialisierung - Die Initialisierung muss in Flash MX 2004 unbedingt durchgeführt werden. Wer diese, wie in Flash 5 oder MX weg lässt. Erhält für this.sX und this.sY - keine korrekten Werte bzw. den Wert NaN (Not a Number)!

Bsp.:
ActionScript:
  1. // In Flash 5 und MX (Funktionsfähig) in Flash MX 2004 (nicht Funktionsfähig)
  2. MovieClip.prototype.wabbern = function(x_end, y_end, multiplikator, ratio) {               
  3.         // Berechnung
  4.         this.sX = this.sX*multiplikator+(x_end-this._xscale)*ratio;
  5.         this.sY = this.sY*multiplikator+(y_end-this._yscale)*ratio;
  6.        
  7.         // Umsetzung auf den jeweils betroffene MovieClip-Instanz
  8.         this._xscale += this.sX;
  9.         this._yscale += this.sY;       
  10. };
  11.  
  12. // Ausführung
  13. this.onEnterFrame = function() {
  14.     mc.wabbern(200,200,0.8,0.7);
  15. }

Hinweis
Es besteht die Möglichkeit entweder die Codezeilen zu optimieren und die Initialisierung durchzuführen oder in Flash MX 2004 unter Einstellungen für Veröffentlichungen... auf Flash 5 bzw. 6 und ActionScript 1.0 umzustellen. Die Optimierung der Codezeilen ist jedoch zu bevorzugen, da die Alternative dazu führt, dass die möglicherweise eingesetzten Flash MX 2004 Neuerungen beim veröffentlichen verloren gehen und die übrigen Bestandteile des Flash Films nicht mehr korrekt abgearbeitet werden!

Achtung
Dieser Tipp sollte nicht nur beim Einsatz des prototype-Objekts beherzigt werden, sondern ist in Flash MX 2004 auch ohne weiteres auf andere Wertebehälter, wie z.B. Variablen (Zeitleistenvariablen, etc.) und Arrays übertragbar.

3. Sauberes Scoping - Der Gültigkeitsbereich und die korrekte Zuweisung innerhalb der prototype-Methode ist zu beachten. Daher sollte man nicht, wie in zahlreichen Flash 5 Skripte auf den Einsatz von this verzichten. Dieses Schlüsselwort dient zur ordentlichen Instanzierung eines Objekts (Instanz) ist meist aus reiner Schreibfaulheit weg gelassen worden. Mit this wird auf das aktuell betroffene Objekt bzw. auf die betroffene Instanz verwiesen! Durch den Einsatz wird gewährleistet, dass die prototype-Methode auf mehr als ein Objekt bzw. eine Instanz angewendet werden kann und die zu verarbeitenden Werte der betroffenen Instanzen nicht durcheinander gewürfelt werden oder gar die falsche Instanz betroffen ist.

Bsp.:
ActionScript:
  1. // Ausführung der wabbern-Methode auf drei Instanzen
  2. this.onEnterFrame = function() {
  3.     mc.wabbern(200,200,0.8,0.7);
  4.     mc2.wabbern(150,300,0.6,0.07);
  5.     mc3.wabbern(170,50,0.4,0.5);
  6. }

Bsp.: Unsauberes Scoping
ActionScript:
  1. // Unsaubere Scoping - beim Einsatz von prototype führt zu einem unkontrollierbaren Verhalten!
  2. MovieClip.prototype.wabbern = function(x_end, y_end, multiplikator, ratio) {   
  3.         // Initialisierung
  4.         if (sX == undefined) sX = 0;
  5.         if (sY == undefined) sY = 0;       
  6.                    
  7.         // Berechnung
  8.         sX = sX*multiplikator+(x_end-_xscale)*ratio;
  9.         sY = sY*multiplikator+(y_end-_yscale)*ratio;
  10.        
  11.         // Umsetzung auf den jeweils betroffene MovieClip-Instanz
  12.         _xscale += sX;
  13.         _yscale += sY; 
  14. };
  15.  
  16.  
  17. // Ausführung
  18. this.onEnterFrame = function() {
  19.     mc.wabbern(200,200,0.8,0.7);
  20. }

Hinweis
Sollte das Beispiel ausgeführt werden. Wird man feststellen, dass nicht nur die MovieClip-Instanz mc vom wabbern-Effekt betroffen ist, sondern sämtliche visuellen Bestandteile des Flash Films verformt werden. Wie man sieht hat man die Kontrolle darüber, welche Instanz von der prototype-Methode betroffen sein soll, dadurch verloren!


Alternative - Einsatz von with (this) { ... }
Um den Schreibaufwand durch den Einsatz des Schlüsselworts this zu verringern, kann man auf die Anweisung with zurückgreifen.

Bsp.:
ActionScript:
  1. // Alternative Lösung durch Einsatz von with(this) {...}
  2. MovieClip.prototype.wabbern = function(x_end, y_end, multiplikator, ratio) {   
  3.     with (this) {
  4.         // Initialisierung
  5.         if (sX == undefined) this.sX = 0;
  6.         if (sY == undefined) this.sY = 0;      
  7.                    
  8.         // Berechnung
  9.         sX = sX*multiplikator+(x_end-_xscale)*ratio;
  10.         sY = sY*multiplikator+(y_end-_yscale)*ratio;
  11.        
  12.         // Umsetzung auf den jeweils betroffene MovieClip-Instanz
  13.         _xscale += sX;
  14.         _yscale += sY;   
  15.     }
  16. };
  17.  
  18. // Ausführung
  19. this.onEnterFrame = function() {
  20.     mc.wabbern(200,200,0.8,0.7);
  21. }

Achtung
Bei der Initialisierung der Werte sX und sY ist unbedingt darauf zu achten, dass auf der rechten Seite der Zuweisung (des Gleicheitszeichen) this.sX bzw. this.sY steht, sonst erhält man keine auf die Instanz bezogenen sX/sY-Wertebehälter, sondern auf _level0 bezogene sX/sY-Wertebehälter. Beim Einsatz von with (this) { ... } ist dies unbedingt zu beachten! Dies gilt auch für Flash 5 und MX!


Fazit
Sollte man beim Einsatz von MovieClip.prototype in Flash MX 2004 diese drei Tipps berücksichtigen kann nichts mehr schief gehen! Man sollte diese Tipps auch für den Einsatz in Flash 5 und MX beherzigen.


Besonderheit
Die aufgeführten Tipps für MovieClip.prototype lassen sich generell auf den Einsatz des prototype-Objekt übertragen, z.B. String.prototype, Button.prototype., etc.

Be inspired!

Liebe Grüsse
Matze K.
Angehängte Dateien
Dateityp: zip fsxywabber.zip (14,4 KB, 493x aufgerufen)
Madokan ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist aus.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 03:21 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele