Highscoreliste mit Flash und PHP

Scorpion-Stinger

Erfahrenes Mitglied
Re: Geschwindigkeit eines MC indirekt proportional zur Zeit erhöhen (MX2004)

Hi,

gehört zwar nicht mehr ganz zum Thema, habe allerdings immernoch Fragen.

Ich habe mittlerweile eine Art "High-Score"-Ebene entwickelt und möchte nun gern folgendes realisieren:

1. Wenn ein Spieler das Spiel erstmalig beendet hat, soll die externe Datei (auf localHost) namens liste.php ausgelesen werden. In dieser Datei steht: Spieler und die dazugehörige Zeit. Wenn das so eben gespielte Spiel eine neue "Bestzeit" erreicht hat, soll der Wert (Name und Zeit) in die .php-Datei geschrieben werden und sofort im Spiel aktuallisiert werden. Nun habe ich da mal ein bisschen mit :

PHP:
loadVariables()

und

loadVariablesNum ()

experimentiert, es kommt aber immer die folgende Meldung im Dyn. Textfeld:

undefined.

Es wäre echt Super, wenn mir dazu nochmal jemand etwas Hilfestellung geben könnte.

Danke im Voraus.
 
Re: Geschwindigkeit eines MC indirekt proportional zur Zeit erhöhen (MX2004)

Wie sieht denn Dein PHP-Script aus bzw. wie werden die Daten gespeichert? Das PHP-Script ansich wirst Du ja nicht verändern, sondern eine Textdatei oder Datenbank verwenden...

Statt loadVariables schlage ich Dir das LoadVars-Objekt vor (ein simples Beispiel findest Du z.B. hier), das um einiges flexibler ist.

Wenn Du "undefined" erhälst, liegt es generell meistens an falschen Pfaden, fehlenden Bezeichnern/Instanznamen oder daran, dass Du nicht auf das vollständige Laden der Daten wartest. Zumindest letzteres ist mit loadVars.onLoad kein Problem mehr. ;)

Gruß
.
 
Re: Geschwindigkeit eines MC indirekt proportional zur Zeit erhöhen (MX2004)

Hi Datic,

um das mal etwas abzukürzen. Hättest du evtl. eine bessere Lösung, die ohne PHP auskommt und den gleichen Zweck erfüllt?

Am Anfang wollte ich ja ein einfaches XML-Dokument nehmen und die 2 Werte da hinein schreiben, das wollte allerdings auch nicht so, wie es sollte.

Bin für jegliche Möglichkeiten sehr dankbar.

Gruß
 
Re: Geschwindigkeit eines MC indirekt proportional zur Zeit erhöhen (MX2004)

Hi,

hab das jetzt mal mit dem LoadVars() Objekt versucht, bringt allerdings auch nicht den erhofften Effekt.

Wie müsste denn eine .txt-Datei aufgebaut sein, um die Werte mit den aktuellen Werten zu vergleichen und evtl. den höheren Wert in die Text-Datei zu schreiben.

wie gesagt, es soll alles nur Offline betrieben werden.

DANKE.
 
Re: Geschwindigkeit eines MC indirekt proportional zur Zeit erhöhen (MX2004)

Hi,

ich hab mal eben was gebastelt: Im Anhang findest Du eine Flash/PHP-Kombination, die eine Highscoreliste mit Nickname und Punktzahl erstellt. Verwendet wird eine XML-Datei.

Du kannst einstellen, wie viele Einträge angezeigt werden und wie viele gespeichert werden. Die Funktionen sind eigentlich alle dokumentiert, wenn Fragen auftauchen: einfach nochmal melden!

Ich weiß, dass es nicht besonders praktisch ist, das Einfügen neuer Highscores in Flash zu übernehmen, aber ich kam auf die Schnelle mit dem XML-Funktionen in PHP nicht klar ... in AS gings schneller und reicht auch vielleicht für einfache Ansprüche. ;)

Gruß
.
 

Anhänge

  • highscore.zip
    7,1 KB · Aufrufe: 107
Re: Geschwindigkeit eines MC indirekt proportional zur Zeit erhöhen (MX2004)

Hallo Datic,

erst einmal vielen, vielen Dank.;)

Nur ein Problem:

Ich habe meine Seite High-Score jetzt nach deiner Vorlage eingefügt, aber schreibt die erzielte Zeit einfach nicht in das xml-Dokument. Außerdem glaube ich, dass ich da etwas falsch erklärt habe, nicht die aktuelle Uhrzeit soll dem Namen zugewiesen werden, sondern die im Spiel erzielte Bestzeit.

Ich würde dir die Datei samt der von dir erstellten nochmal mit Anhängen, da ich in diesem php-Script irgendwie nicht so recht durchsehe.:-(

Nochmals vielen Dank.
 
Re: Geschwindigkeit eines MC indirekt proportional zur Zeit erhöhen (MX2004)

Hi,

keine Sorge, es wird mitnichten die aktuelle Zeit übergeben. Das Date-Objekt verwende ich nur, um einen Timestamp zu erzeugen, damit die xml-Datei jedes Mal neu geladen wird. ;) Elegenter wäre es, die geänderte Liste direkt vom PHP-Script zurückgeben zu lassen, aber da habe ich mir selbst ein Bein gestellt: Ich sende die Daten nämlich als LoadVars-Kollektion an das Script, möchte aber direkt ein XML-Objekt zurückbekommen; und ein XML-Objekt kann ich nicht als Rückgabeziel der sendAndLoad-Methode eines LoadVars-Objektes angeben... also lade ich die Datei einfach direkt. ;)

Das AS als solches macht eigentlich noch gar nichts, es stellt nur einige Funktionen und Variablen zur Verfügung, um eine Highscoreliste zu verwalten:
  • showamt : Die Anzahl der angezeigten Einträge (z.B. die ersten 10)

  • snipat: Die Anzahl der gespeicherten Einträge, damit die Datei nicht endlos wächst. ;)

  • getScore(): Lädt die Datei "highscore.xml" ein (erstmal nur, um die bisherige Liste zu bekommen und ggf. anzuzeigen)

  • showScore(): Zeigt eine mit getScore() eingeladene Liste an. Ich habe hier als Beispiel ein Textfeld mit dem Instanznamen "display" gewählt, aber Du kannst ja sonstwas nehmen.

  • addScore(nick, score): Hier gehts erst richtig los: Wir fügen der Liste, die wir mit getScore() geladen haben, einen neuen Highscore hinzu. Dazu übergeben wir der Funktion einen Nicknamen "nick" und den neuen Highscore als Zahl, also z.B.:
PHP:
addScore("Datic", 103468);
Der neue Eintrag wird an der richtigen Position (nach Score sortiert) in die Liste eingefügt. Da Du anscheinend Bestzeiten statt Scores speichern willst (sprich: je kleiner die Zahl, desto weiter oben in der Liste), müsste man diese Funktion ggf. noch ändern, da sie im Moment die höchsten Werte ganz nach oben setzt. Am Ende ruft diese Funktion automatisch die Funktion sendScore() auf, mit der die Liste an das PHP-Script zum Abspeichern gesendet wird:


  • sendScore(): Diese Funktion überführt die Highscoreliste in ein LoadVars-Objekt und sendet es an das PHP-Script.

  • getStamp(): Hilfsfunktion, um aus einem Datum einen UTC-Timestamp zu bekommen (s.o.).

Das PHP-Script macht im Prinzip nichts anderes, als dass es sämtliche Nicknames und Scores übergeben bekommt und in der Datei "highscore.xml" speichert. Die Datei wird jedes Mal überschrieben, das ganze ist also nicht besonders sicher - besser wäre wohl eine datenbankbasierte Lösung, aber das soll ja nur ein einfaches Beispiel sein.

Gruß

P.S.: Ich habe das Thema mal gesplittet, weil das nun nicht mehr wirklich was mit der ursprünglichen Frage zu tun hat.
.
 
Zuletzt bearbeitet:
Hi,

ich komme mir schon fast etwas bescheuert vor.
Ich habe mir deine Erklärungen oben durchgelesen und dem Script in meiner .fla verglichen.

Ich habe mir auch das .php-script nochmals zu Gemüte geführt, aber ich kann machen was ich will, die PHP-Datei will den neuen Wert einfach nicht in die XML einfügen.

Da ich auf dem Gebiet PHP nicht wirklich Ahnung habe (kann ja noch kommen), weis ich nicht, ob diese ja eigentlich serverseitige Sprache auch Offline den Wert schreibt.

Wenn ich dem Dyn. Textfeld nicht nur den Instanznamen sondern auch noch eine Variable zuweise erscheint wieder: _level0.display. Also nehme ich an, dass es auch daran nicht liegen kann.

Ich werde, in der Hoffnung, dass du evtl. durchsiehst nochmals die aktuelle Version hochladen.

Ich hatte auch den Variablen name und score schon werte zugewiesen ( also score=_root.timer; und name=_root.name_show; weil ich diese Werte komplett übergebe.

Naja, wahrscheinlich sollte ich einfach den Beruf wechseln als Maurer oder Tischler hat man ja solche Probleme mit Sicherheit nicht.:(

Gruß,

Mathias
 
Zuletzt bearbeitet:
Hi,

hmm, vielleicht bin ich grade einfach zu blind, aber ich sehe in Deiner Datei nirgendwo, dass Du auch nur eine dieser Funktionen aufrufst... :confused:

Generell: Damit ein PHP-Script funktioniert, muss es zumindest auf einem lokalen Server laufen (z.B. Apache) und über den Browser auf localhost aufgerufen werden.

Gruß

EDIT: Na ja, wenn ich nachher die Zeit finde, baue ich Dir das mal so zusammen, dass es funktioniert. In der Vorschau wird es dennoch nicht laufen, nur in einer Serverumgebung. ;)
.
 
Zuletzt bearbeitet:
Hi,

ich danke dir schonmal für deine ganzen Bemühungen.

Was du oben beschrieben hast, ist genau mein Problem. Das Spiel soll "fast" ohne irgendwelche Voraussetzungen laufen. Ich programmiere das nicht für mich, sondern für meine kleine Nichte. Die hat einen alten 500MHz - Celeron und mit Sicherheit keine Ahnung einen Apache einzurichten( ist 5 Jahre Alt).

Aus diesem grund dachte ich, dass du aus deiner Erfahrung heraus eine "Server-lose" Möglichkeit findest, das Spiel zum Laufen zu bringen.

Wenn es keine Möglichkeit geben sollte, dann würde ich den Bereich einfach weg lassen.

Wie gesagt, ich Danke dir für die ganze Arbeit, die du dir machst.

Mfg,

Mathias
 
Zurück