MovieClip.prototype.wabber und Wabber-Klasse

Matthias Kannengiesser

Erfahrenes Mitglied
Vom Prototype zur Klasse und den diversen Lösungsansätzen.

ActionScript 1.0

Hier haben wir den Wabber-Prototype, welcher direkt im Flash Film untergebracht wird. Es wird ein MovieClip-Symbol mit dem Verknüpfungsbezeichner Clip und zwei MovieClip-Instanzen mc und mc2 benötigt.

PHP:
MovieClip.prototype.wabber = function(multiplikator, xskal, yskal, ratio) {
	if (this.sX == undefined) this.sX = 0;
	if (this.sY == undefined) this.sY = 0;	
	this.onEnterFrame = function() {
		this.sX = Number(this.sX*multiplikator)+Number((xskal-this._xscale)*ratio);
		this.sY = Number(this.sY*multiplikator)+Number((yskal-this._yscale)*ratio);
		this._xscale += Math.round(this.sX);
		this._yscale += Math.round(this.sY);
	};
};
MovieClip.prototype.wabberKill = function(multiplikator, xskal, yskal, ratio) {
	if (this.sX == undefined) this.sX = 0;
	if (this.sY == undefined) this.sY = 0;
	this.onEnterFrame = function() {
		if (this._xscale != xskal || this._yscale != yskal) {
			this.sX = Number(this.sX*multiplikator)+Number((xskal-this._xscale)*ratio);
			this.sY = Number(this.sY*multiplikator)+Number((yskal-this._yscale)*ratio);
			this._xscale += Math.round(this.sX);
			this._yscale += Math.round(this.sY);
		} else {
			delete this.onEnterFrame;
		}
	};
};

// Clip Wabber
mc.wabber(.9, 150, 150, .3);
mc.onRollOver = function() {
	this.wabber(.9, 150, 150, .3);
};
mc.onRollOut = function() {
	this.wabber(.9, 100, 100, .3);
};

// Clip WabberKill
mc_2.wabberKill(.9, 150, 150, .3);
mc_2.onRollOver = function() {
	this.wabberKill(.9, 150, 150, .3);
};
mc_2.onRollOut = function() {
	this.wabberKill(.9, 100, 100, .3);
};


----


ActionScript 2.0

Hier haben wir drei ActionScript 2.0 Lösungsansätze (Simple, Register, Comp).

Simple-Version Wabber.as - Skript

Diese Version gehört zur Standard-Lösung. Die Klasse Wabber wird hierbei von der MovieClip-Klasse abgeleitet.

PHP:
class Wabber extends MovieClip {
	
	// Prop
	private var sX:Number;
	private var sY:Number;
	
	// Constructor
	function Wabber() {}
	
	// Effekt wabbern
	public function wabbern(multiplikator:Number, xskal:Number, yskal:Number, ratio:Number):Void {
		if (sX == undefined) sX = 0;		
		if (sY == undefined) sY = 0;
		onEnterFrame = function() {
			sX = Number(sX*multiplikator)+Number((xskal-_xscale)*ratio);
			sY = Number(sY*multiplikator)+Number((yskal-_yscale)*ratio);
			_xscale += Math.round(sX);
			_yscale += Math.round(sY);
		};
	}
	
	// Effekt wabbern_kill
	public function wabbern_kill(multiplikator:Number, xskal:Number, yskal:Number, ratio:Number):Void {
		if (sX == undefined) sX = 0;
		if (sY == undefined) sY = 0;
		onEnterFrame = function() {
			if (_xscale != xskal || _yscale != yskal) {
				sX = Number(sX*multiplikator)+Number((xskal-_xscale)*ratio);
				sY = Number(sY*multiplikator)+Number((yskal-_yscale)*ratio);
				_xscale += Math.round(sX);
				_yscale += Math.round(sY);			
			} else {			
				delete onEnterFrame;
			}
		};
	}
}


Flash Film Simple-Version - Skript

Flash Film (es wird lediglich ein Movieclip-Symbol mit dem Verknüpfungsbezeichner Clip vorausgesetzt) - die Verknüpfung zur Klasse muss ebenfalls zugewiesen werden.

PHP:
// Clip wabber
mc.wabbern(.9, 150, 150, .3);

mc.onRollOver = function()
{
    this.wabbern(.9, 150, 150, .3);
}
mc.onRollOut = function()
{   
	this.wabbern(.9, 100, 100, .3);
}


// Clip wabbern_kill
mc_2.wabbern_kill(.9, 150, 150, .3);

mc_2.onRollOver = function()
{
    this.wabbern_kill(.9, 150, 150, .3);
}
mc_2.onRollOut = function()
{   
	this.wabbern_kill(.9, 100, 100, .3);
}



Dyn-Version Wabber.as - Skript

Wie man sieht wird die Klasse Wabber von der Klasse MovieClip abgeleitet!

PHP:
class Wabber extends MovieClip {
	
	// Prop
	private var sX:Number;
	private var sY:Number;
	
	// Constructor	
	public function Wabber() {}
	
	// Effekt wabbern
	public function wabbern(multiplikator:Number, xskal:Number, yskal:Number, ratio:Number):Void {
		if (sX == undefined) sX = 0;		
		if (sY == undefined) sY = 0;
		onEnterFrame = function() {
			sX = Number(sX*multiplikator)+Number((xskal-_xscale)*ratio);
			sY = Number(sY*multiplikator)+Number((yskal-_yscale)*ratio);
			_xscale += Math.round(sX);
			_yscale += Math.round(sY);
		};
	}
	
	// Effekt wabbern_kill
	public function wabbern_kill(multiplikator:Number, xskal:Number, yskal:Number, ratio:Number):Void {
		if (sX == undefined) sX = 0;
		if (sY == undefined) sY = 0;		
		onEnterFrame = function() {
			if (_xscale != xskal || _yscale != yskal) {
				sX = Number(sX*multiplikator)+Number((xskal-_xscale)*ratio);
				sY = Number(sY*multiplikator)+Number((yskal-_yscale)*ratio);
				_xscale += Math.round(sX);
				_yscale += Math.round(sY);			
			} else {			
				delete onEnterFrame;
			}
		};
	}
}

Flash Film Dyn-Version - Skript

Flash Film (es wird lediglich ein Movieclip-Symbol mit dem Verknüpfungsbezeichner Clip vorausgesetzt) - die Verknüpfung zur Klasse übernimmt Object.registerClass()

PHP:
// Symbol Clip und Wabber-Klasse
Object.registerClass("Clip", Wabber);

// MC
this.attachMovie ("Clip", "mc", 1, {_x:160, _y:200});

mc.wabbern(.9, 150, 150, .3);

mc.onRollOver = function()
{
    this.wabbern(.9, 150, 150, .3);
}
mc.onRollOut = function()
{   
	this.wabbern(.9, 100, 100, .3);
}

// MC2
this.attachMovie ("Clip", "mc2", 2, {_x:410, _y:200});

mc2.wabbern_kill(.9, 150, 150, .3);

mc2.onRollOver = function()
{
    this.wabbern_kill(.9, 150, 150, .3);
}
mc2.onRollOut = function()
{   
	this.wabbern_kill(.9, 100, 100, .3);
}



Comp-Version Wabber.as - Skript

Eine Ableitung von der Klasse MovieClip ist in diesem Fall nicht notwendig.

PHP:
class Wabber {
	
	// Prop
	private var ziel:MovieClip;
	
	// Constructor	
	public function Wabber(ziel:MovieClip) 
	{
		this.ziel = ziel;		
	}
	
	// Effekt wabbern
	public function wabbern(multiplikator:Number, xskal:Number, yskal:Number, ratio:Number):Void {		
		if (ziel.sX == undefined) ziel.sX = 0;		
		if (ziel.sY == undefined) ziel.sY = 0;
		ziel.onEnterFrame = function() {			
			this.sX = Number(this.sX*multiplikator)+Number((xskal-this._xscale)*ratio);
			this.sY = Number(this.sY*multiplikator)+Number((yskal-this._yscale)*ratio);			
			this._xscale += Math.round(this.sX);
			this._yscale += Math.round(this.sY);
		};
	}
	
	// Effekt wabbern_kill
	public function wabbern_kill(multiplikator:Number, xskal:Number, yskal:Number, ratio:Number):Void {
		if (ziel.sX == undefined) ziel.sX = 0;		
		if (ziel.sY == undefined) ziel.sY = 0;
		ziel.onEnterFrame = function() {
			if (this._xscale != xskal || this._yscale != yskal) {
				this.sX = Number(this.sX*multiplikator)+Number((xskal-this._xscale)*ratio);
				this.sY = Number(this.sY*multiplikator)+Number((yskal-this._yscale)*ratio);			
				this._xscale += Math.round(this.sX);
				this._yscale += Math.round(this.sY);			
			} else {			
				delete this.onEnterFrame;
			}
		};
	}	
}

Flash Film Comp-Version - Skript

Flash Film (es wird lediglich ein Movieclip-Symbol mit dem Verknüpfungsbezeichner Clip vorausgesetzt) - die Verknüpfung zum MovieClip übernimmt die Klasse selbst.

PHP:
// Clip Objekt
var clip:Wabber = new Wabber(this.mc);
clip.wabbern(.9, 150, 150, .3);

mc.onRollOver = function()
{
    clip.wabbern(.9, 150, 150, .3);
}
mc.onRollOut = function()
{   
	clip.wabbern(.9, 100, 100, .3);
}

// Clip2 Objekt
var clip2:Wabber = new Wabber(this.mc2);
clip2.wabbern_kill(.9, 150, 150, .3);

mc2.onRollOver = function()
{
    clip2.wabbern_kill(.9, 150, 150, .3);
}
mc2.onRollOut = function()
{   
	clip2.wabbern_kill(.9, 100, 100, .3);
}

Hinweis
Im Anhang wabber_klassen_2005.zip sind sämtliche vier Versionen enthalten pickt euch euren Favoriten heraus (Prototype, Simple, Register, Comp). So lernt man auch gleich vier unterschiedliche Lösungsansätze kennen.
Be inspired!

Liebe Grüsse
Matze K.
 

Anhänge

Hi,

dankeschön für die schönen Beispiele! so etwas wäre allerdings meiner Meinung nach besser in den Tutorials aufgehoben, da hier die Gefahr besteht, dass es mit der Zeit untergeht (ich erinnere mich an manche schöne Scripte und Clips von Dir, die als Antwort auf manche Frage taugen würden - aber die Suche in alten Threads führt nicht immer zum Erfolg).

Gruß

P.S.: wenn es Dir recht ist, kann ich das auch an unsere Mini-FAQ anhängen. ;)
.
 
Zurück