setIntervall löschen


ClaudiaGlade

Mitglied
Hi,

ich habe ein kleines Spiel erstellt, das für sich selbst auch richtig funktioniert.
Nun wollte ich es auf meine HP stellen und lade es deshalb in eine spiel.swf, das soweit auch funktioniert. Mit einem Button kann man dann wird diese dann geschlossen, was ebenfalls noch funktioniert. Wenn ich jetzt aber die spiel.swf neu starte (weil ich z.B. das Spiel noch mal spielen möchte) läuft die Zeit in dem Spiel selber schon rückwärts, was nicht sein soll und bei dem ersten Start auch nicht passiert. Ich denke es liegt daran das das Intervall nicht gelöscht wird wenn ich das Spiel nicht richtig beende sondern mit dem Button die übergeordnete swf lösche.
Ich probier jetzt schon seit einiger zeit herum und habe da Forum schon durchsucht aber leider noch nichts gefunden. Vielleicht kann mir ja jemand auf die Sprünge helfen...

mein Spiel (seifenblasenjagd.swf) hat 3Labels (wait, start und timeover)
der AS für wait lautet:
Code:
stop();

var game:Object  	=	new Object();

game.punkte 		=	0;
game.zeit 			=	90;
game.bedarf 		=	10;
game.speed 			= 	8;
game.steigerung 	=	1;
game.pos			=	100;
game.highscore		=	"seifenblasenjagd";

// Zähler
game.aktive 		=	0;
game.gesamtzaehler 	=	0;
game.time 			=	game.zeit;


// Blendet den Mauszeiger aus
bg_mc.onRollOver = function() {
	Mouse.hide();
}
bg_mc.onRollOut = function() {
	this.Mouse.show();
}
// Starten des Spieles
_root.onMouseDown = function()
{
	gotoAndStop("start");
	}

der AS für start lautet:
Code:
stop();
// Bewegen des Pins
_root.pin_mc.onEnterFrame = function() {
	this._x = _root._xmouse;
	this._y = _root._ymouse;
};

// Generieren der Start-Ballons
for (var i = 1; i<=game.bedarf; i++) {
	var name = "blasen_"+game.gesamtzaehler+"_mc";
	// generieren einer zufälligen Position
	var xpos = Math.round(Math.random()*500);
	var ypos = Math.round(Math.random()*_root._height);
	generiereBlasen(name, xpos, ypos);
}

id = setInterval(timer, 1000, id);

// Erneuert die Ballons und stellt den Bedarf zufrieden
_root.onEnterFrame = function() {
	if (game.aktive<game.bedarf) {
		for (var i = 1; i<=game.bedarf-game.aktive; i++) {
			var name = "blasen_"+game.gesamtzaehler+"_mc";
			// Zufällige x-Position
			var xpos = Math.round(Math.random()*500);
			generiereBlasen(name, xpos, _root._height);
		}
	}
};
function generiereBlasen(blasenname, xpos, ypos) {
	// Anhängen des Ballons in die Ballonbox
	_root.blasenbox_mc.attachMovie("blasen", blasenname, game.gesamtzaehler);
	// Anhängen der Funktionalitäten
	_root.blasenbox_mc[blasenname].onEnterFrame = function() {
		_root.blasenbox_mc[blasenname]._y -= _root.game.speed;
		if (this._y<-game.pos) {
			// Ist oben, daher verringert er die aktive Anzahl uns eins
			//	und entfernt sich selbst
			game.aktive--;
			this.removeMovieClip();
		}
	};
	_root.blasenbox_mc[blasenname].onMouseDown = function() {
		var xpos = _root.pin_mc._x + game.pos;
		var ypos = _root.pin_mc._y + game.pos;
		if (this.hitTest(xpos, ypos, true)) {
			// Spielt die "Platzen-Sequenz"
			this.play();
		}
	};
	// Positionierung des neuen Ballons
	setProperty(_root.blasenbox_mc[blasenname], _x, xpos);
	setProperty(_root.blasenbox_mc[blasenname], _y, ypos);
	// Setzt den gesamtzaehler (eindeutige Nummer des Ballons) und auch
	// die Nummer der aktiven Ballons
	_root.game.gesamtzaehler++;
	_root.game.aktive++;
}
function timer() {
	// Diese Funktion wird einmal in der Sekunde aufgerufen
	game.time--;
	// Ausgeben der Zeit
	_root.zeitbox_mc.time_txt.text = game.time;
	// Zeit abgelaufen?
	if (game.time<=0) {
		clearInterval(id);
		// Spiel ist zuende
		_root.gotoAndStop("timeover");
	}
	// Steigerung der Geschwindigkeit 
	switch (game.time) {
	case 80 :
		game.speed += game.steigerung;
		break;
	case 60 :
		game.speed += game.steigerung;
		break;
	case 40 :
		game.speed += game.steigerung;
		break;
	case 20 :
		game.speed += game.steigerung;
		break;
	}
}

und für timeover:
Code:
stop();
Mouse.show();

_root.punktestand_txt.text = game.punkte;
_root.onEnterFrame = function() {
};

local = SharedObject.getLocal(game.highscore);
// Erster Aufruf muss einen 0-rekord setzen
if (local.data.exist != true) {
	local.data.rekord = 0;
	local.data.exist = true;
	local.flush();
}
if (local.data.rekord<game.punkte) {
	local.data.rekord = game.punkte;
	local.flush();
}
_root.rekord_txt.text = local.data.rekord;


_root.onMouseDown = function() {
	gotoAndPlay(1);
};

in der spiel.swf steht der folgende Code:
Code:
stop();
button.onPress = function() {
	//_root.clearInterval(id);?
	_root.spiel.unloadMovie();
	Mouse.show();
};

//Inhalt laden
inhalte.loadMovie("seifenblasenjagd.swf");
inhalte._x = 100;
inhalte._y = 100;
inhalte._lockroot = true;

Hoffentlich ist mein Problem verständlich und mir kann einer helfen...
 

Jens B.

Erfahrenes Mitglied
Viel zu viel Code, deswegen greif ich einfach mal in die Dunkelheit: man kann einen Intervall mit clearInterval löschen, wenn man ihn in einer Variable definiert hat:

jens = setInterval(blubb);
clearInterval(jens);

War es das, wonach du gesucht hast? Wenn nicht schau ich mir den Code doch mal an.. vielleicht kannst du ihn auf die relevanten Teile beschneiden?
 

ClaudiaGlade

Mitglied
Danke für die Antwort.
Das mit dem ClearInterval hab ich ja auch drin wenn das Spiel "normal" beendet wird. Ich weiss nur nicht wieso die Zeit noch runterläuft, wenn ich das gesamte Spiel neu aufrufe...
Vielleicht helfen die fla's ja, besser zu verstehen was ich meine...
 

Anhänge

  • spiel_test.zip
    770,5 KB · Aufrufe: 14

Matrixguy

Erfahrenes Mitglied
Hi,

du musst das Intervall an der Stelle löschen, wo du es erstellt hast.
Das Unloaden des MCs reicht hier nicht aus.

Ersetze
//_root.clearInterval(id);?
durch
clearInterval(inhalte.id);


mfg
 

Neue Beiträge