2012-04-08 15 views
0

Ich werde ein wenig erklären, bevor ich meine Frage stelle ... Ich habe zahlreiche Spiele erstellt, die ein Hauptmenü laden und entladen.Saving Textfeld Eingabe

Der Spieler gibt seinen Namen im Hauptmenü ein, bevor er irgendwelche Spiele spielt. Wenn der Spieler ein Spiel beendet, möchte ich seine Zeit speichern (um das Spiel abzuschließen) und diese Zeit wieder ins Hauptmenü zurückladen.

Gibt es eine Möglichkeit, die Zeiten mit AS3 zu einem Word-Dokument oder etwas ähnliches zu speichern? Ich kann die Zeiten nicht mit php an meine Website senden, da die Spiele im Rahmen eines Wettbewerbs genutzt werden und alles mit dem Internet funktionieren muss.

Irgendwelche Ideen Leute?

Edit:

var dataloader:URLLoader = new URLLoader(); 
    var dataarray:Array = new Array(); // do this where you intialise other vars 

    function preparesave() 
    { 
     dataloader.load(new URLRequest("savedata.txt")); 
    } 

    dataloader.addEventListener(Event.COMPLETE,savedata); 

    function savedata (event:Event) 
{ 
    dataarray = event.target.data.split(/\n/); 
    dataarray.push(MyTimer); 

    var bytes:ByteArray = new ByteArray(); 
    var fileRef:FileReference = new FileReference(); 

    for (var i = 0; i < dataarray.length;i++) 
    { 
     bytes.writeMultiByte(dataarray[i] + "\n", "iso-8859-1"); 
     bytes.writeMultiByte('English Game Time: ',"iso-8859-1"); 
     bytes.writeMultiByte(HourText.text.toString(),"iso-8859-1"); 
     bytes.writeMultiByte(':',"iso-8859-1"); 
     bytes.writeMultiByte(MinuteText.text.toString(),"iso-8859-1"); 
     bytes.writeMultiByte(':',"iso-8859-1"); 
     bytes.writeMultiByte(SecondText.text.toString(),"iso-8859-1"); 
    } 

    fileRef.save(bytes,"savedata.txt") 
} 
+4

Können Sie den letzten Satz klären? Denn das Senden von Partituren via PHP hört sich doch nach "Arbeiten mit dem Internet" an. – joncys

Antwort

0

Für kleine Datenmengen gehen Sie am besten mit automaticoys Lösung mit SharedObjects. Sie benötigen nur wenig Zeit für die Einrichtung und sind eine effiziente Möglichkeit, kleine Datenmengen zu speichern.

Wenn es nicht für Sie ist, können Sie immer in eine Textdatei laden/speichern. Sie können dies mit ByteArrays und FileReferences tun.

Da Sie in einer Word-Datei gespeichert haben, würde ich vorschlagen, Speichern in eine Textdatei wäre der beste Weg, um Ihr Ziel zu erreichen (obwohl anders als Ihr Wort Doc. Vorschlag, ich bin mir nicht sicher .. Ihr Ziel ist eine Art unklar)

Hier ist eine sehr schnelle Demonstration des Speicherns in eine Textdatei .. Wenn Sie Hilfe benötigen, laden Sie es auch, lassen Sie es mich wissen.

function savedata() { 
var bytes:ByteArray = new ByteArray(); 
var fileRef:FileReference = new FileReference(); 
bytes.writeMultiByte(playername + "\n", "iso-8859-1"); 
bytes.writeMultiByte(playerscore.toString(),"iso-8859-1"); 
fileRef.save(bytes,"savedata.txt"); 
} 

Diese ziemlich einfach mit writeMultiByte .. ist, können wir so viele Daten wie vor dem Speichern unserer Textdatei benötigt schreiben! Dies ist besonders nützlich, wenn Sie Datenfelder haben, die Sie speichern müssen.

Wie auch immer, die "iso-8859-1" ist einfach eine Referenz auf den verwendeten Zeichensatz/Dateiformat. Ich bin mir nicht sicher, ob Sie einfach utf-16 usw. schreiben können. habe es immer so benutzt, wie es oben geschrieben ist.

Peter

9547 (aber eine Zeile nach oben)

zu laden, können Sie durch die Linie nur geteilte Daten können, was ein:

Das Ergebnis in der Textdatei hier wird der folgende sein Array voller Strings und Ints/Zahlen (aber Ihre Ergebnisse können funktionieren). Lass es mich wissen, wenn du Hilfe brauchst.

Ich bin nicht sicher, ob dies die effizienteste Methode ist, um das zu erreichen, wonach Sie suchen, da Ihr Ziel mir nicht ganz klar ist, aber es war eine sehr nützliche Methode für mich, große Datenmengen zu speichern Ich vermute, du willst das machen, wenn du alle Spielergebnisse zusammenrechnest.

edit:

Okay, auf die gestellten Fragen Sie unter:

  1. Um mehr als einen Benutzer zu speichern Punktzahl einfach. Verwenden Sie einfach ein einzelnes Array, das die Daten aus der Textdatei lädt (falls die Textdatei vorhanden ist), fügt dann das neue Ergebnis am Ende des Arrays hinzu und speichert es dann in der Textdatei. Hier

ist ein Beispiel:

var dataloader:URLLoader = new URLLoader(); 
var dataarray:Array = new Array(); // do this where you intialise other vars 

function preparesave() { 
    dataloader.load(new URLRequest("savedata.txt")); 
} 

dataloader.addEventListener(Event.COMPLETE,savedata); 
function savedata (event:Event) { 
    dataarray = event.target.data.split(/\n/); 
    dataarray.push(playername); 
    dataarray.push(playerscore); 
    var bytes:ByteArray = new ByteArray(); 
    var fileRef:FileReference = new FileReference(); 
    for (var i = 0; i < dataarray.length;i++) { 
     bytes.writeMultiByte(dataarray[i] + "\n", "iso-8859-1"); 
    } 
    fileRef.save(bytes,"savedata.txt") 
} 

Was dies bedeutet nehmen ist alle vorhandenen Daten speichern, drückt er auf ein Array (wo eine Zeile auf Ihrer Datei speichern ist Array Dateneingabe), fügt Ihr entsprechende Daten und schiebt es zurück in die Sicherungsdatei.

(2) Um dies zu laden in, während im Hauptmenü, legen Sie einfach diesen Code in den Rahmen des Hauptmenüs ..

dataloader.load(new URLRequest("savedata.txt")); 
dataloader.addEventListener(Event.COMPLETE,loaddata); 
function loaddata (event:Event) { 
    dataarray = event.target.data.split(/\n/); 
} 

Diese alle vorhandenen Daten in ein Array geladen werden. Was Sie von da an tun, liegt an Ihnen.

+0

Hey danke für die Antwort. Dieser Code speichert die Spielerzeit am Ende des Spiels und müsste geladen werden, sobald das fertige Spiel entladen und das Hauptmenü neu geladen wurde. Ich habe jetzt ein paar Probleme: Der Code fragt den Benutzer zu speichern, könnte dies automatisch geschehen? Wenn ich mehr als ein Benutzer Zeit in der gleichen TXT-Datei speichern wollte, wie könnte ich das tun? Und schließlich, wie würde ich über das Laden im Hauptmenü gehen? Danke für Ihre Hilfe. – Ant

+0

Keine Sorgen Kumpel. Leider (aber auch glücklicherweise) kann das Speichern in einer Datei nicht physisch erfolgen, ohne den Benutzer zu fragen, da dies ein Sicherheitsrisiko darstellt. Das können wir nicht erreichen. Was Ihre anderen Fragen betrifft, werde ich meine Antwort oben mit einigen Antworten bearbeiten. :) – hazdog

+0

Hey, ich habe meine Frage oben auf der Seite bearbeitet, um zu zeigen, wie der Code aussieht. Aus irgendeinem Grund wird es nicht angezeigt und Fehler oder nicht spart es etwas? Tut mir leid, das ist das Problem, dass mir etwas fehlt. – Ant