用libgdx在json文件上写

时间:2016-08-07 07:40:43

标签: java android json libgdx writer

我是这个论坛的新手,我使用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”。

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

1 个答案:

答案 0 :(得分:0)

好吧,我可能会建议你略有不同的方法。 我假设您使用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. 从文件中解析JsonResult个对象
  2. 从该对象获取关卡的分数
  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);
    }