【问题标题】:cannot cast from json value to orderMap无法从 json 值转换为 orderMap
【发布时间】:2013-06-05 18:53:13
【问题描述】:

在尝试从 here 测试 physcis 正文编辑器加载器 (BodyEditorLoader.java) 时

我得到了这个不正确的转换,下面是函数

private Model readJson(String str) {
    Model m = new Model();
    OrderedMap<String,?> rootElem 
    = (OrderedMap<String,?>) new JsonReader().parse(str);  //this line has casting problem

    Array<?> bodiesElems = (Array<?>) rootElem.get("rigidBodies");

    for (int i=0; i<bodiesElems.size; i++) {
        OrderedMap<String,?> bodyElem = (OrderedMap<String,?>) bodiesElems.get(i);
        RigidBodyModel rbModel = readRigidBody(bodyElem);
        m.rigidBodies.put(rbModel.name, rbModel);
    }

    return m;
}

【问题讨论】:

    标签: json box2d libgdx physics


    【解决方案1】:

    由于新版本的 libgdx 确实支持 Jsonvalue 并带有 this 帮助

     private Model readJson(String str) {
        Model m = new Model();
    
        JsonValue map = new JsonReader().parse(str);
    
        JsonValue bodyElem = map.getChild("rigidBodies");
        for (; bodyElem != null; bodyElem = bodyElem.next()) {
            RigidBodyModel rbModel = readRigidBody(bodyElem);
            m.rigidBodies.put(rbModel.name, rbModel);
        }
    
        return m;
    }
    

    【讨论】:

      【解决方案2】:

      parse method returns a JsonValue

      由于 Libgdx 的更新版本包括对 JSON 代码的不向后兼容的更改,您可能会看到这种不匹配。请参阅the blog post,其中包括:

      只有读取 JSON 会受到影响。如果你使用 JsonReader,你会回来的 一个 JsonValue 而不是 OrderedMap。

      您可以通过更新代码以使用 JsonValue 或降级到旧版本的 libgdx(4 月 25 日之前)来解决此问题。如果您使用的是 Libgdx 的夜间版本,请务必注意更改并跟上博客(其中公布了大多数重大更改)。否则,坚持使用 Libgdx 的“已发布”版本可能更安全。

      【讨论】:

        猜你喜欢
        • 2019-05-07
        • 1970-01-01
        • 2021-10-14
        • 2019-12-28
        • 1970-01-01
        • 2020-02-25
        • 2020-03-12
        • 1970-01-01
        相关资源
        最近更新 更多