【问题标题】:Writing on json file with libgdx使用 libgdx 写入 json 文件
【发布时间】:2016-12-13 05:07:59
【问题描述】:

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

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

【问题讨论】:

    标签: java android json libgdx writer


    【解决方案1】:

    好吧,我可能会建议您使用稍微不同的方法。 我假设您使用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. 与新分数进行比较并根据需要重写。

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

    【讨论】:

    • 感谢您的快速回复!但我正在这样做,但它不起作用,我有“错误读取文件,由未找到分数引起的文件”。你知道为什么吗?可以吗,首先: Json json = new Json(); FileHandle 句柄 = Gdx.files.internal("scores.json"); JsonResult jsonResult = json.fromJson(JsonResult.class, 句柄); ObjectMap 分数 = JsonResult.getScores();?
    • @Adrien 您需要重新创建结果文件,请参阅我更新的答案。我在加载屏幕期间执行此操作,检查文件是否存在,如果不存在 - 创建一个新文件。并且您的旧 json 文件对这个新结构无效,因此应该删除。
    猜你喜欢
    • 2014-05-13
    • 2019-10-12
    • 1970-01-01
    • 2015-08-25
    • 2021-12-03
    • 2016-12-15
    • 1970-01-01
    • 2017-12-16
    • 2017-06-29
    相关资源
    最近更新 更多