Übergabe einer Variable an eine Funktion

WilliWurst

Mitglied
Hallo!

Ich habe folgendes Problem, ich übergebe eine Variable an eine Funktion. Das funktioniert soweit auch, nur werden weitere Inhalte nicht mehr ausgeführt. :mad:
Habe Flash 8.

Wäre Super wenn jemand ein Tipp hat :-)

PHP:
function fade(test:Boolean) {
	trace(test);
	if (test == true) {
		var i = 1;
		var fade_all:Number = setInterval(wait, 50);
		function wait() {
			var mc = eval("mc_"+alphasequence[i]);
			var alpha_interval:Number = setInterval(fadeImage, 25, mc);
			function fadeImage(target_mc:MovieClip):Void {
				target_mc._alpha += 20;
				if (target_mc._alpha >= 100) {
					clearInterval(alpha_interval);
				};
			};
			if (i>=8) {
				clearInterval(fade_all);
			};
			i++;
		};
	};
};

fade(true);
 
Hi,

zum einen ist in der Funktion "wait" die Variable "i" nicht mehr bekannt, da sie ein Member der Funktion "fade" ist und per setInterval aufgerufen wird.

Zum anderen musst Du Interval-Identifier als globale oder Objektvariablen ablegen, damit sie beim Aufruf von clearInterval noch gültig sind. Sowohl "alpha_interval" als auch "fade_all" sind nicht mehr bekannt, wenn Du clearInterval aufrufst.

Generell würde ich Dir empfehlen, Funktionen nicht auf diese Weise zu verschachteln (schon gar nicht in Verbindung mit setInterval, das ist ein absolutes "don't"), sondern die benötigten Funktionen nebeneinander auf einer Zeitleiste abzulegen. Am elegantesten wäre die Verwendung einer eigenen fade-Klasse oder entsprechende Prototypen.

Gruß
.
 
Hallo,

du vermischst hier Funktionsdefinitionen und -aufrufe. Eine Funktion wird immer erst definiert und dann aufgerufen (genau in dieser Reihenfolge!!). Das kann gleich nacheinander geschehen, aber eine Funktionsdefinition ist nie ein Aufruf, wird also auch keine effektiven Auswirkungen auf deinen Flashfilm haben.

So wie ich das sehe hast du drei Funktionen, die du verwendest. Die sollten wir erst mal definieren:
Code:
function fade(test:Boolean) {
    trace(test);
    if (test == true) {
        var i = 1;
        this.fade_all = setInterval(this, "wait", 50);
    };
}; 

function wait() {
   var mc = eval("mc_"+alphasequence[i]);
   this.alpha_interval = setInterval(this, "fadeImage", 25, mc);
   if (i>=8) {
       clearInterval(this.fade_all);
   };
   i++;
};

function fadeImage(target_mc:MovieClip):Void {
   target_mc._alpha += 20;
   if (target_mc._alpha >= 100) {
      clearInterval(this.alpha_interval);
   };
};

Nun rufst du die erste Funktion auf, die andern zwei werden ja dann jeweils durch die setIntervals aktiviert:

Code:
fade (true);

Noch ein Tipp zu du setInterval:
Speicher den Identifier des Intervals in einer bleibenden Member-Variable (also als Eigenschaft, wie z.B. this.id), sonst wird er nach dem Abarbeiten der Funktion verworfen.
Ausserdem solltest du dem Interval immer den Pfad des Identifiers mitgeben (z.B. this.interval statt var interval), damit du aus der Funktion darauf zugreifen kannst. Die Syntax ist bei solchen Interval-Aufrufen leicht anders ==> Link

gruss

EDIT: Argh ;)
 
Zuletzt bearbeitet:
Also diese lösung ist schon nicht schlecht, funktioniert aber noch nicht richtig...

Ich hab das jetzt so:

Code:
function fade() {
	_global.i = 1;
	this.fade_all = setInterval(this, "wait", 50);
}; 

function wait() {
	var mc = eval("marken_mc_"+alphasequence[_global.i]);
	this.alpha_interval = setInterval(this, "fadeImage", 25, mc);
	if (_global.i>=8) {
		clearInterval(this.fade_all);
	};
	_global.i++;
};

function fadeImage(target_mc:MovieClip) {
	target_mc._alpha += 20;
	if (target_mc._alpha >= 100) {
		clearInterval(this.alpha_interval);
	};
}; 

fade();

In diesem Fall werden ungefähr 2,5 objekte eingblendet, dann ist schluss.
Interessanter Weise werden alle Objekte eingeblendet wenn ich in der letzten Funktion die Abfrage in
<< target_mc._alpha == 100 >> ändere. Alledings verschwinden dann auch wieder alle nach einer gewissen Zeit...

Danke für eure Hilfe
 
Zuletzt bearbeitet:
Zurück