我是这个论坛的新手,我使用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”。
我希望有人可以帮助我! 谢谢,我在等你的答案!
答案 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);
}
}
逻辑非常简单:
JsonResult
个对象创建新的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);
}