2016-08-07 27 views
0

Ich bin neu in diesem Forum und ich mache eine Android-App mit libgdx und ich möchte den Spieler-Score auf eine JSON-Datei speichern. Ich kann die JSON-Datei lesen, um die Punktzahl zurückzubekommen, aber wenn der Spieler eine bessere Punktzahl erzielt, weiß ich nicht, wie ich die neue beste Punktzahl in der JSON-Datei schreiben soll. ich auf vielen Websites durchsucht und ich fand nicht, etwas Gutes ...Schreiben auf JSON-Datei mit libgdx

Meine JSON-Datei, wie das ist:

{ "scores":[ 
    { 
    "level":1, 
    "bestScore":100 
    }, 
    { 
    "level":2, 
    "bestScore":100 
    }, 
    { 
    "level":3, 
    "bestScore":100 
    }, 
    { 
    "level":4, 
    "bestScore":100 
    }, 
    { 
    "level":5, 
    "bestScore":100 
    }, 
    { 
    "level":6, 
    "bestScore":100 
    }, 
    { 
    "level":7, 
    "bestScore":100 
    }, 
    { 
    "level":8, 
    "bestScore":100 
    }, 
    { 
    "level":9, 
    "bestScore":100 
    }, 
    { 
    "level":10, 
    "bestScore":100 
    }, 
    { 
    "level":11, 
    "bestScore":100 
    }, 
    { 
    "level":12, 
    "bestScore":100 
    }, 
    { 
    "level":13, 
    "bestScore":100 
    }, 
    { 
    "level":14, 
    "bestScore":100 
    }, 
    { 
    "level":15, 
    "bestScore":100 
    }, 
    { 
    "level":16, 
    "bestScore":100 
    }, 
    { 
    "level":17, 
    "bestScore":100 
    }, 
    { 
    "level":18, 
    "bestScore":100 
    }, 
    { 
    "level":19, 
    "bestScore":100 
    }, 
    { 
    "level":20, 
    "bestScore":100 
    } 
    ] 
} 

Und zum Beispiel, wenn der Spieler tun, um eine Punktzahl von 30 in der Ebene 1, ich möchte die "100" von der Ebene 1 durch "30" ersetzen.

Ich hoffe jemand kann mir helfen! Danke, ich warte auf deine Antworten!

Antwort

0

Nun, ich kann Ihnen einen etwas anderen Ansatz dafür vorschlagen. Ich nehme an, dass Sie Libgdx Json Api verwenden. Zu allererst brauchen wir Java Darstellung von json, so etwas wie:

public class JsonResult { 
    private ObjectMap<String, Integer> scores; 

    public ObjectMap<String, Integer> getScores() { 
     return scores; 
    } 

    public void setScores(ObjectMap<String, Integer> scores) { 
     this.scores = scores; 
    } 
} 

Hier in der scores Karte der Schlüssel ein level_ Präfix mit aktueller Level-Nummer (z level_1) und der Wert eine Punktzahl für diese Ebene.

Auf diese Weise Ihre json Struktur ähnlich sein würde: dann also

{ 
    "scores":{ 
     "level_1":100, 
     "level_2":100, 
     "level_3":200, 
     "level_4":300 
     .... 
} 

, wenn Sie neue Punktzahl sparen:

public void saveResult(Integer level, Integer newScore) { 
    JsonResult jsonResult = json.fromJson(JsonResult.class, resultJson); 
    ObjectMap<String, Integer> scores = jsonResult.getScores(); 
    String levelKey = "level_" + level; 
    Integer scoreForLevel = scores.get(levelKey); 
    if (newScore > scoreForLevel) { 
     scores.put(levelKey, newScore); 
     jsonResult.setScores(scores); 
     json.toJson(jsonResult, resultJson); 
    } 
} 

Die Logik ist ganz einfach:

  1. Parse JsonResult Objekt aus Datei
  2. Holen Sie sich die Punktzahl für die Ebene von diesem Objekt
  3. Mit der neuen Punktzahl vergleichen und bei Bedarf neu schreiben.

neue JSON-Datei zu erstellen:

public void resetResultFile() { 
    JsonResult jsonResult = new JsonResult(); 
    ObjectMap<String, Integer> initialScores = new ObjectMap<>(1); 
    initialScores.put("level_1", 0); 
    jsonResult.setScores(initialScores); 
    json.toJson(jsonResult, resultJson); 
} 
+0

Vielen Dank für Ihre schnelle Antwort! Aber ich mache das und es funktioniert nicht, ich habe "Fehler beim Lesen der Datei, verursacht durch Felder nicht gefunden Scores". Haben Sie eine Idee warum? Ist das in Ordnung, für den Anfang: Json Json = neue Json(); \t \t FileHandle-Handle = Gdx.files.internal ("scores.json"); \t JsonResult jsonResult = json.fromJson (JsonResult.class, handle); \t ObjectMap scores = JsonResult.getScores() ;? – Adrien

+0

@Adrien Sie müssen Ergebnisdatei neu erstellen, sehen Sie meine aktualisierte Antwort. Ich mache es während des Ladebildschirms, überprüfe, ob die Datei existiert und falls nicht - erstelle eine neue Datei. Und Ihre alte JSON-Datei ist für diese neue Struktur nicht gültig und sollte daher gelöscht werden. – Enigo