使用 libgdx 在 json 文件上写入

Writing on json file with libgdx

我是这个论坛的新手,我使用 libgdx 制作了一个 android 应用程序,我想将玩家得分保存在 json 文件中。 我可以读取 json 文件来取回分数,但如果玩家得分更高,我不知道如何在 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
  }
  ]
}

例如,如果玩家在关卡 1 中得分为 30,我想将关卡 1 中的“100”替换为“30”。

希望有人能帮助我! 谢谢,我在等你的答案!

好吧,我可能会建议您采用稍微不同的方法。 我假设您使用 Libgdx Json Api。 首先,我们需要 json 的 Java 表示,例如:

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

scores 映射中,键是带有实际级别编号的 level_ 前缀(例如 level_1),值是该级别的分数。

这样您的 json 结构将类似于:

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

那么,当您保存新乐谱时:

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. 从文件
  2. 解析JsonResult对象
  3. 从该对象获取关卡分数
  4. 与新分数比较并根据需要重写。

要创建新的 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);
}