使用 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);
}
}
逻辑很简单:
- 从文件
解析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);
}
我是这个论坛的新手,我使用 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);
}
}
逻辑很简单:
- 从文件 解析
- 从该对象获取关卡分数
- 与新分数比较并根据需要重写。
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);
}