[OBJECT] Prototypes für abbremsende und elastische Eigenschaftsänderung

luke_the_duke

Erfahrenes Mitglied
ACHTUNG: Dieser Code ist in AS 2.0 geschrieben und funktioniert nur für Version MX 2004 bzw. Player 7 und höher!


Code:
Object.prototype.obj_setTo = function (s:Number, d:Number, ms: Number):Void {
	//
	if (this.obj_setToId) {
		clearInterval(this.obj_setToId);
	}
	
	
	var e = 3; 
	var pNr = Math.floor((arguments.length-2)/2);
	var pAll = [];
	//
	for (var i = 0; i < pNr; i++) {
		pAll[i] = {p: arguments[e], t: arguments[e+1]}
		e += 2;
	}
	//
	var i = d;
	
	this.executeObj_setTo = function () {
		if (i>0) {
			i--;
		} else {
			for (var u = 0; u < pAll.length; u++) { 
				var p = pAll[u].p;
				var t = pAll[u].t;
				var dif = t-this[p];
				dif *= s;
				this[p] += dif;
				if (this[p] == this[p +"CTRL"]) {
					pAll.splice(u, 1);
				} else {
					this[p +"CTRL"] = this[p];
				}
	
			}
			if (pAll.length < 1) {
				clearInterval(this.obj_setToId);
			}
		}
	};
	
	this.obj_setToId = setInterval(this, "executeObj_setTo", ms);
}

HINWEIS:
Da alle Klassen in ActionScript von der Object-Klasse erben, kann dieser Prototype auch für alle Klassen verwendet werden. Ausserdem ist zu beachten, dass bei einem LoadVars.send oder sendAndLoad diese Funktion auch als Member des LoadVars-Objekts gilt und folglich mitgeschickt wird.

Beschreibung:
Ändert eine numerische Eigenschaft eines Objects (z.B. Koordinaten, Schriftgrösse etc.) vom aktuellen Wert schrittweise auf den gewünschten Wert. Dabei sind die Wertunterschiede
von Schritt zu Schritt abnehmend.

Code:
meinObject.obj_setTo (Geschwindigkeit, Verzögerung, Intervall [Eigenschaft_1, Zielwert_1], ...[Eigenschaft_n, Zielwert_n])
Geschwindigkeit: Number, wobei 0 < Geschwindigkeit < 1. Beschreibt Geschwindigkeit der Animation.
Verzögerung: Number, Anzahl Intervalle, die abgewartet werden, bevor die Animation beginnt.
Intervall: Number, Zeitabstand in Millisekunden zwischen den einzelnen Funktionsabläufen. Hat Einfluss auf die Geschwindigkeit.
Eigenschaft: String, Eigenschaft des Objects, die verändert werden soll. Nach jedem Eigenschaft-Parameter MUSS ein Zielwert angegeben werden, ansonsten schlägt die Funktion fehl.
Zielwert: Number, Wert auf den die vorhergehende Eigenschaft gesetzt werden soll.

Code:
Object.prototype.obj_elasticTo = function(s:Number, e: Number, d:Number, ms: Number):Void {
	//
	if (this.obj_elasticToId) {
		clearInterval(this.obj_elasticToId);
	}
	
	
	var k = 4; 
	var pNr = Math.floor((arguments.length-3)/2);
	var pAll = [];
	//
	for (var i = 0; i < pNr; i++) {
		pAll[i] = {p: arguments[k], t: arguments[k+1], step: 0}
		k += 2;
	}
	//
	var i = d;
	this.executeObj_elasticTo = function() {
		if (i>0) {
			i--;
		} else {
			for (var u = 0; u < pAll.length; u++) { 
				var p = pAll[u].p;
				var t = pAll[u].t;
				var dif = t-this[p];
				pAll[u].step += dif*s;
				pAll[u].step *= e;
				this[p] += pAll[u].step;
				if (this[p] == this[p +"CTRL"]) {
					pAll.splice(u, 1);
					
				} else {
					this[p +"CTRL"] = this[p];
				}
	
			}
			if (pAll.length < 1) {
				clearInterval(this.obj_elasticToId);
			}
		}
	};
	this.obj_elasticToId = setInterval(this, "executeObj_elasticTo", ms);
};

HINWEIS:
Da alle Klassen in ActionScript von der Object-Klasse erben, kann dieser Prototype auch für alle Klassen verwendet werden. Ausserdem ist zu beachten, dass bei einem LoadVars.send oder sendAndLoad diese Funktion auch als Member des LoadVars-Objekts gilt und folglich mitgeschickt wird.

Beschreibung:
Ändert eine numerische Eigenschaft eines Objects (z.B. Koordinaten) vom aktuellen Wert schrittweise auf den gewünschten Wert. Die Wertunterschiede sind zuerst zunehmend, bis der Zielwert
überschritten ist. Danach nähert sich der aktuelle Wert dem Zielwert immer an, um ihn zu überschreiten, bis sich die Differenz vernachlässigbar ist. Dies gibt einen elastischen Effekt.

Code:
meinObject.obj_elasticTo (Geschwindigkeit, Elastizität, Verzögerung, Intervall, [Eigenschaft_1, Zielwert_1], ...[Eigenschaft_n, Zielwert_n])

Geschwindigkeit: Number, wobei 0 < Geschwindigkeit < 1. Beschreibt Geschwindigkeit der Animation.
Elastizität: Number, wobei 0 < Elastizität < 1. Beschreibt das Ausmass der elastischen Schwingung.
Verzögerung: Number, Anzahl Frames, die abspielen, bevor die Animation beginnt.
Intervall: Number, Zeitabstand in Millisekunden zwischen den einzelnen Funktionsabläufen. Hat Einfluss auf die Geschwindigkeit.
Eigenschaft: String, Eigenschaft des Objects, die verändert werden soll. Nach jedem Eigenschaft-Parameter MUSS ein Zielwert angegeben werden, ansonsten schlägt die Funktion fehl.
Zielwert: Number, Wert auf den die vorhergehende Eigenschaft gesetzt werden soll.
 
Zuletzt bearbeitet:
Zurück