Stoppen der Uhr?

myownsummer

Grünschnabel
hallöschen zusammen,
hüpf jetzt schon ne weile durchs forum und hab auch schon so einiges getestet aber irgendwie wills nicht so recht wie ich.

bastel gerade an nem kleinen spiel bei dem später die zeit gemessen werden soll wie lang man dafür gebraucht hat und das ganze dann in ne bestenliste packen soll.

derzeit hänge ich aber erstmal daran fest die uhr zu stoppen ;)
n paar fehler sind auch noch drin, wie zb der zurück button der das spiel und die zeit reseten sollte. (macht er derzeit noch nicht)

ich hängs einfach mal an, nicht hauen, bin noch kein profi
 
Zuletzt bearbeitet:
Hi,

  • entferne den Code auf der Instanz von "mc_zeit", sondern steuere die Anzeige lieber vom eigentlichen Script aus. Gib dem Clip "mc_zeit" dazu den Instanznamen "timer".

  • Füge am Anfang der Funktion "memory" eine onEnterFrame-Methode ein, die die Zeit anzeigt:
Code:
function memory() {
	this.createEmptyMovieClip("box",1);
	var stime = getTimer();
	timer.onEnterFrame = function() {
		var gametime = getTimer() - stime;
		var minuten = Math.floor(gametime / 60 / 1000);
		var sekunden = Math.floor((gametime - minuten * 60 * 1000) / 1000);
		this.timer.text = minuten + " : " + sekunden;
	}
Die Variable "stime" speichert die Startzeit des Spiels, damit die Anzeige wirklich bei 0 beginnt, und nicht z.B. bei 5, wenn der Spieler das Spiel erst 5 Sekunden nach Filmstart beginnt.


  • Du hast ja schon die Variable "anzahl" definiert, die die Anzahl der Steinpaare auf dem Spielfeld angibt. Um festzustellen, ob das Spiel beendet ist, musst Du diesen Wert immer herunterzählen, wenn zwei Steine entfernt werden:
Code:
	box.pruefen = function(wen) {
		var eins = String(box.karte1).lastIndexOf("_");
		var zwei = String(wen).lastIndexOf("_");
		if (String(wen).substring(zwei+1) == String(box.karte1).substring(eins+1)) {
			box.warten = false;
			box.karte1.removeMovieClip();
			wen.removeMovieClip();
			box.karte1 = "";
			box.anzahl -= 2;
			if (box.anzahl <= 0) { // wenn keine Steine mehr da sind...
				box.finished(); // ... sind wir fertig.
			}


  • Nun brauchst Du noch die Funktion "finished", in der Du den Timer anhältst und die Endzeit ausgibst:
Code:
	box.finished = function() {
		delete timer.onEnterFrame;
		var gametime = getTimer() - stime;
		var minuten = Math.floor(gametime / 60 / 1000);
		var sekunden = Math.floor((gametime - minuten * 60 * 1000) / 1000);
		this.timer.text = "Zeit: " + minuten + " : " + sekunden;
	}

Hier noch einmal der komplette Code:
Code:
function memory() {
	this.createEmptyMovieClip("box",1);
	var stime = getTimer();
	timer.onEnterFrame = function() {
		var gametime = getTimer() - stime;
		var minuten = Math.floor(gametime / 60 / 1000);
		var sekunden = Math.floor((gametime - minuten * 60 * 1000) / 1000);
		this.timer.text = minuten + " : " + sekunden;
	}
	box._x = 100;
	box._y = 100;
	box.tiefe = 0;
	box.anzahl = 12;
	box.zeilen = 4;
	box.spalten = (box.anzahl*2)/box.zeilen;
	box.warten = false;
	box.karte1 = "";
	box.aTempNums = [];
	for (var i = 1; i<=box.anzahl; i++) {
		for (var j = 1; j<=2; j++) {
			box.aTempNums.push(i);
		}
	}
	box.aKarten = [];
	while (box.aTempNums.length>0) {
		var zufall = Math.floor(Math.random()*box.aTempNums.length);
		box.aKarten.push(box.aTempNums[zufall]);
		box.aTempNums.splice(zufall,1);
	}
	for (var i = 0; i<box.zeilen; i++) {
		for (var j = 0; j<box.spalten; j++) {
			box.attachMovie("mc_k"+box.aKarten[box.tiefe],"k"+box.tiefe+"_"+box.aKarten[box.tiefe],box.tiefe);
			var obj = box["k"+box.tiefe+"_"+box.aKarten[box.tiefe]];
			//test paar
//obj.onRollOver = function(){
//          trace(this._name);
//}
//ende test
			obj.onPress = function() {
				if (!box.warten) {
					box.umdrehen(this);
				}
			};
			obj.stop();
			obj._x = j*(obj._width+2);
			obj._y = i*(obj._height+2);
			box.tiefe++;
		}
	}
	box.umdrehen = function(welche) {
		if (box.karte1 == welche) {
			return;
		}
		welche.play();
		welche.onEnterFrame = function() {
			if (this._currentframe>=this._totalframes) {
				this.stop();
				delete this.onEnterFrame;
			}
		};
		if (box.karte1 == "") {
			box.karte1 = welche;
		} else {
			box.warten = true;
			pauseInterv = setInterval(box.pruefen, 1000, welche);
		}
	};
	box.pruefen = function(wen) {
		var eins = String(box.karte1).lastIndexOf("_");
		var zwei = String(wen).lastIndexOf("_");
		if (String(wen).substring(zwei+1) == String(box.karte1).substring(eins+1)) {
			box.warten = false;
			box.karte1.removeMovieClip();
			wen.removeMovieClip();
			box.karte1 = "";
			box.anzahl -= 2;
			if (box.anzahl <= 0) {
				box.finished();
			}
		} else {
			box.karte1.onEnterFrame = function() {
				if (this._currentframe>1) {
					this.gotoAndStop(this._currentframe-1);
				} else {
					box.warten = false;
					this.stop();
					box.karte1 = "";
					delete this.onEnterFrame;
				}
			};
			wen.onEnterFrame = function() {
				if (this._currentframe>1) {
					this.gotoAndStop(this._currentframe-1);
				} else {
					this.stop();
					delete this.onEnterFrame;
				}
			};
		}
		clearInterval(pauseInterv);
	};
	box.finished = function() {
		delete timer.onEnterFrame;
		var gametime = getTimer() - stime;
		var minuten = Math.floor(gametime / 60 / 1000);
		var sekunden = Math.floor((gametime - minuten * 60 * 1000) / 1000);
		this.timer.text = "Zeit: " + minuten + " : " + sekunden;
	}
}
memory();

Gruß

P.S.: Bitte beachte Punkt 15 unserer Netiquette in Bezug auf Groß- und Kleinschreibung - danke!
.
 
Super, dank dir recht herzlich.
Entschuldigung wegen der Kleinschreibung, ist ne dumme Angewohnheit :(

Hab das ganze jetzt mal in mein Script eingebaut. Läuft auch soweit super, das Problem mit dem Spielende hatte ich jetzt so gelöst

PHP:
box.anzahl--;
                    if(box.anzahl < 1){
                              trace("Spielende");
                              box.removeMovieClip();
                    }

aber kommt ja auf selbe raus ;)

was mich gerade noch verwirrt ist dies hier:

PHP:
box.finished = function() {
		delete timer.onEnterFrame;
		var gametime = getTimer() - stime;
		var minuten = Math.floor(gametime / 60 / 1000);
		var sekunden = Math.floor((gametime - minuten * 60 * 1000) / 1000);
		this.timer.text = "Zeit: " + minuten + " : " + sekunden;
	}

über trace lasse ich mir Spielende und Minuten und Sekunden ausgeben. Das wird soweit erkannt, jeodch erscheint im "Zeitfenster" nicht das "Zeit: " + minuten + " : " + sekunden;

hast du eine Idee woran das liegt? Am Instanznamen kanns nicht liegen, während des Spiels gibt er mir die Zeit im Textfeld an

:confused:
 
Zuletzt bearbeitet:
kein Problem. Jetzt läufts einwandfrei, da machts weiter basteln gleich wieder mehr Spass. Kann mich nun dem Startbild und Highscore widmen.

Vielen Dank nochmal

Übrigens hab ich dein
PHP:
box.anzahl -= 2
in
PHP:
box.anzahl -= 1
geändert. Wird nämlich erst im Array gelöst das die paare auftauchen. Anzahl 2 ergibt dann nämlich 2 Paare ;)
 
Zuletzt bearbeitet:
Zurück