2016-08-07 26 views
0

私はこのフォーラムでは新しく、libgdxを使ってアンドロイドアプリを作って、jsonファイルにプレーヤーのスコアを保存したいと思います。 スコアを取り戻すためにjsonファイルを読むことはできますが、プレイヤーがより良いスコアを出した場合は、jsonファイルに新しいベストスコアを書き込む方法がわかりません。 私は多くのウェブサイト上で検索し、私は良いものを見つけられませんでした...libgdxでjsonファイルに書き込む

私のJSONファイルは、そのようなものです:

{ "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 
    } 
    ] 
} 

例えば、プレイヤーのレベルが30のスコアをすれば1、レベル1の「100」を「30」に置き換えます。

誰かが私を助けてくれることを願っています! ありがとう、私はあなたの答えを待っています!

答えて

0

まあ、私はあなたのために少し異なるアプローチを提案するかもしれません。 Libgdx Json Apiを使用することを前提としています。私たちは、のようなものJSONのJava表現を必要とするすべての まず:キーをマップここscores

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; 
    } 
} 

は、実際のレベルの数(例えばlevel_1)とlevel_接頭辞で、値はそのレベルのスコアです。そして、あなたは新しいスコアを保存するとき、そう

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

この方法であなたのJSONの構造はのようになり

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); 
    } 
} 

ロジックは非常に簡単です:

  1. 解析JsonResultファイルからのオブジェクト
  2. そのオブジェクトからのレベル
  3. 新しいスコアと比較し、必要に応じて書き換えます。

は、新しいJSONファイルを作成するには:

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

は、あなたの迅速な応答をありがとう! しかし、私はこれをやっているし、それは動作していない、私は "ファイルを読み込むエラー、フィールズが見つかりませんでした原因でスコア"。 理由が分かりますか? これは大丈夫ですか?Json json = new Json(); \t \t FileHandle handle = Gdx.files.internal( "scores.json"); \t JsonResult jsonResult = json.fromJson(JsonResult.class、handle); \t ObjectMap スコア= JsonResult.getScores();? – Adrien

+0

@Adrien結果ファイルを再作成する必要があります。最新の回答を参照してください。ローディング中にファイルをチェックし、存在しない場合は新しいファイルを作成します。古いJsonファイルはこの新しい構造には有効ではないため、削除する必要があります。 – Enigo

関連する問題