art-d-sign
-


Hinweise


Antwort
 
LinkBack Themen-Optionen Thema durchsuchen Thema bewerten
Alt 23.05.2004, 12:26   #1
TP-Moderator
 
Benutzerbild von Madokan
 
Registriert seit: Oct 2002
Ort: Berlin/Germany
Madokan bringt sich richtig ein
Post

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)
Code:
MovieClip.prototype.wabbern = function(x_end, y_end, multiplikator, ratio) {	
		// Initialisierung
		if (this.sX == undefined) this.sX = 0;
		if (this.sY == undefined) this.sY = 0;		
					
		// Berechnung
		this.sX = this.sX*multiplikator+(x_end-this._xscale)*ratio;
		this.sY = this.sY*multiplikator+(y_end-this._yscale)*ratio;
		
		// Umsetzung auf den jeweils betroffene MovieClip-Instanz
		this._xscale += this.sX;
		this._yscale += this.sY;		
};

// Ausführung
this.onEnterFrame = function() {
	mc.wabbern(200,200,0.8,0.7);
}

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!

Code:
// In Flash 5 und MX (Funktionsfähige Schreibweisen)
movieclip
MovieClip
Movieclip

// In Flash MX 2004 (Funktionsfähige schreibweise)
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.:
Code:
// In Flash 5 und MX (Funktionsfähig) in Flash MX 2004 (nicht Funktionsfähig)
MovieClip.prototype.wabbern = function(x_end, y_end, multiplikator, ratio) {				
		// Berechnung
		this.sX = this.sX*multiplikator+(x_end-this._xscale)*ratio;
		this.sY = this.sY*multiplikator+(y_end-this._yscale)*ratio;
		
		// Umsetzung auf den jeweils betroffene MovieClip-Instanz
		this._xscale += this.sX;
		this._yscale += this.sY;		
};

// Ausführung
this.onEnterFrame = function() {
	mc.wabbern(200,200,0.8,0.7);
}
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.:
Code:
// Ausführung der wabbern-Methode auf drei Instanzen
this.onEnterFrame = function() {
	mc.wabbern(200,200,0.8,0.7);
	mc2.wabbern(150,300,0.6,0.07);
	mc3.wabbern(170,50,0.4,0.5);
}
Bsp.: Unsauberes Scoping
Code:
// Unsaubere Scoping - beim Einsatz von prototype führt zu einem unkontrollierbaren Verhalten!
MovieClip.prototype.wabbern = function(x_end, y_end, multiplikator, ratio) {	
		// Initialisierung
		if (sX == undefined) sX = 0;
		if (sY == undefined) sY = 0;		
					
		// Berechnung
		sX = sX*multiplikator+(x_end-_xscale)*ratio;
		sY = sY*multiplikator+(y_end-_yscale)*ratio;
		
		// Umsetzung auf den jeweils betroffene MovieClip-Instanz
		_xscale += sX;
		_yscale += sY;	
};


// Ausführung
this.onEnterFrame = function() {
	mc.wabbern(200,200,0.8,0.7);
}
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.:
Code:
// Alternative Lösung durch Einsatz von with(this) {...}
MovieClip.prototype.wabbern = function(x_end, y_end, multiplikator, ratio) {	
	with (this) {
		// Initialisierung
		if (sX == undefined) this.sX = 0;
		if (sY == undefined) this.sY = 0;		
					
		// Berechnung
		sX = sX*multiplikator+(x_end-_xscale)*ratio;
		sY = sY*multiplikator+(y_end-_yscale)*ratio;
		
		// Umsetzung auf den jeweils betroffene MovieClip-Instanz
		_xscale += sX;
		_yscale += sY;		
	}
};

// Ausführung
this.onEnterFrame = function() {
	mc.wabbern(200,200,0.8,0.7);
}
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, 200x aufgerufen)
Madokan ist offline   Mit Zitat antworten


Antwort

  Aktuelles Thema
  TP Hilfe Forum > Web-Editoren & Coding > Flash > Sammlung Actionscript 1 und 2
Einsatz des prototype-Objekts in Flash MX 2004 Einsatz des prototype-Objekts in Flash MX 2004
« Weltzeituhr (MX und MX 2004) | Analyse von SWC-Dateien »

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Thema bewerten
Thema bewerten:

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

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

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Flash MX 2004 Datenbankanbindung Vigilante Flash 4 26.12.2003 10:47
Macromedia Flash FX kommt! PortalNews Traum-News 3 04.03.2002 15:24
web-site für jemand aus dem medizinischen bereich grille Archiv 14 21.11.2001 18:56
Spieleprogrammierung in Flash SNCIS Flash 2 01.11.2001 21:45


Alle Zeitangaben in WEZ +2. Es ist jetzt 15:03 Uhr.

Powered by: vBulletin Version 3.7 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd. / Search Engine Friendly URLs by vBSEO 3.2.0 ©2008, Crawlability, Inc.
Traum-Projekt.com | Suchen | Archiv | Impressum | Kontakt | | | Nach oben |



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67