Highscore speichern und laden

also die uhrzeit müsste klappen denn er gibt mir ne ausgabe mit einer Uhrzeit aus
aber beim nächsten Start ist der Highscore wieder auf Null **
vielleicht gebe ich dein As wo falsches ein, soll ich es auf den Übertragen Button mit dem ich den Highscore übertrage eintragen, oder in das Frame wo auch das Highscore As steht?
mfg
 
Hi,

da ich Deinen Film nicht kenne, kann ich auch keine genaue Aussage machen.

Generell:

Der erste Teil:
Code:
var so = SharedObject.getLocal("highscore");
sollte beim Start des Films ausgeführt werden.

Beim Speichern des Highscores solltest Du dann so etwas machen:
Code:
so.data.score = meinHighscore; // <-- Dein Highscore-Wert

so.data.flush();

Wenn Du den Highscore anzeigen willst, geht das so:
Code:
trace(so.data.score);

Gruß
.
 
es geht noch immer nicht :(
ich würde es dir ja per anhang geben aber es ist zu groß^^
nun gibt er mir nach dem übertragen button ein leeres ausgabefeld
soll ich es dir vielleicht irgendwie schicken?
mfg
 
Hi,

ersetze den Code in Frame 11 durch folgendes, um immer die besten 10 Ergebnisse anzuzeigen:
Code:
var so = SharedObject.getLocal("highscore");

trace(so);

var scoreList = new Array();

for (var i in so.data) {
	var obj = so.data[i].split("_|_");
	scoreList.push({username:obj[0], score:parseInt(obj[1], 10)});
}

scoreList.sort(byScore);

showScores();

function byScore(o1, o2) {
	if (o1.score > o2.score) {
		return -1;
	} else if (o1.score < o2.score) {
		return 1;
	} else {
		return 0;
	}
}

function append(str_name, points) {
	scoreList.push({username:str_name, score:points});
	scoreList.sort(byScore);
	saveData();
}

function saveData() {
	so.clear();
	so.data = new Object();
	var amt = Math.min(10, scoreList.length);
	for (var i=0; i<amt; i++) {
		so.data["entry_" + i] = scoreList[i].username + "_|_" + scoreList[i].score;
	}
	so.flush();
	delete Punkte1;
	delete Leben1;
	gotoAndStop(1);
}

function showScores() {
	var amt = Math.min(10, scoreList.length);
	hs_name = "";
	hs_punkte = "";
	for (var i=0; i<amt; i++) {
		hs_name += scoreList[i].username + chr(13);
		hs_punkte += scoreList[i].score + chr(13);
	}
}

Ich habe hier die Textfeldvariable "name" in "yourname" geändert, da "name" ein reserviertes Wort ist. Entsprechend muss der Aufruf auf der Schaltfläche nun so lauten:
Code:
on (release) {
	append(yourname, punkte);
}

Tipp: Wenn Du folgende Konventionen beachtest, werden Deine Projekte um einiges wart- und lesbarer:
  • Lege für jedes Objekt eine eigene Ebene an

  • Rücke den Code lesbar ein.

  • Verwende möglichst eine eigene Ebene nur für Code.

  • Verwende keine Textfeldvariablen, sondern greife auf Textfelder über ihren Instanznamen zu.

  • Für später würde ich Dir empfehlen, auf Code auf Objekten ("on (ereignis) ") zu verzichten und statt Schaltflächen MovieClips zu verwenden.

Gruß
.
 
DANKE!!
nur zwei Fragen noch:
1) warum wird beim Frame Highscore kurz ein Textfeld mit [object Object] gezeigt
2) in welchem Teil wird befohlen das Datum und die Zeit anzuzeigen?
den Rest versuch ich besser gar nicht so genau zu verstehen ^^
mfg
 
  • Ich habe vergessen, eine trace-Aktion (in Zeile 3) zu löschen:
Code:
trace(so);
Dies kannst Du entfernen.


  • Wo sollten Datum und Zeit angezeigt werden? Dies ist nicht Bestandteil meines Codes - es werden nur Benutzername und Punktestand gespeichert.

Gruß
.
 

Neue Beiträge

Zurück