Steuerung von MC in For-Schleife

malibubu

Mitglied
Hallo,

ich bin es schon wieder :-)

Irgendjemand hat mal ein Script hier im Forum gestellt, womit mal MCs bewegen kann (ich habe die Funktion unten angehangen).

So lautet die Funktion:
Code:
function moveTo( mc, x, y, iID ) {
	clearInterval( this[ "MT" + iID ] );
	speed = 0.05;
	delete mc.onEnterFrame;
	mc.xAim = x;
	mc.yAim = y;
	mc.onEnterFrame = function() 
	{
		this.diffX = Math.abs(this._x-this.xAim)*speed;
		this.diffY = Math.abs(this._y-this.yAim)*speed;
		if (this._x>this.xAim) 
		{
			this._x -= this.diffX;
		} 
		else if (this._x<this.xAim)
		{
			this._x += this.diffX;
		}
		if (this._y>this.yAim) 
		{
			this._y -= this.diffY;
		} 
		else if (this._y<this.yAim) 
		{
			this._y += this.diffY;
		}
		if (this.diffX<0.1 && this.diffY<0.1) 
		{
			this._x = this.xAim;
			this._y = this.yAim;
			delete this.onEnterFrame;
		}
	};
}

Aufruf:
Code:
// Zeitabhängiger Aufruf  ----------------------------------------------------
	button1.onRelease = function()
	{
	//IntervalID       iID-Pfad, function, Zeit,	mc,    x,	y,		iID
		MT0 = setInterval( _root, "moveTo", 200,	kreis, 300,	300,	 0);
		MT1 = setInterval( _root, "moveTo", 700,	kreis, 50,	100,	 1);
		MT2 = setInterval( _root, "moveTo", 1200,	kreis, 600,	300,	 2);
		MT3 = setInterval( _root, "moveTo", 1800,	kreis, 50, 	400,	 3);
		MT4 = setInterval( _root, "moveTo", 2000,	kreis, 150,	150,	 4);
	}

Nun möchte ich nicht jeden "Schritt" einzeln aufzählen (MT1,....) sondern in einer For-Schleife dynamisch vorgehen. Ich habe mir dazu folgendes ausgedacht:

Code:
button1.onRelease = function() {
			i=4; out = 200;
			for(momentpos=0; momentpos <= i; momentpos++) {
				_root[ "MT" + i ] = setInterval( _root, "moveTo", out, puppe1, _root["feld"+i]._x, _root["feld"+i]._y, i);
			 out = out+500;
			};
			
	};
_root["feld"+i]_x bzw. _y sind die koordinaten, wo er das MC hinbewegen soll.

Wenn ich ein trace(...) mache, liefert er auch für jeden Schritt die richtigen Werte aus.
Leider tritt aber nur eine Bewegung (und zwar die zum letzten Schritt) ein.

Woran könnte das liegen?

Danke im Voraus!
 
Hi,

du inkrementierst momentpos , aber nicht i , benutzt aber i als variable Adressierung innerhalb der Schleife, das kann so nichts werden....

B
 
inkrementieren = hochzählen

Die Zeile aus deinem Script
Code:
_root[ "MT" + i ] = setInterval( _root,"moveTo",out,puppe1,_root["feld"+i]._x,_root["feld"+i]._y,i);
Da du die Variable i mit dem Wert 4 belegt hast, du aber i nicht von 0 bis <4 hochzählst in der for-Schleife (sondern die Variable "momentpos"), wird letztlich nur der Movieclip "MT4" (weil i=4) angesprochen und "feld4" usw.

Soviel zur Theorie. Zur Praxis, aber ungetestet und ohne Garantie (ist schon zu spät dafür): ersetze in oben genannter Zeile "i" durch "momentpos"

Gruß
Rena
 
Zuletzt bearbeitet:
Zurück