2

我有一个 Android 游戏,我想将关卡存储为静态 Java 类。Java中以下Javascript对象的等价物是什么?

var Levels = {
Level1:{
    shapes:[
    {
        bodytype : "dynamic",
        h : "50.0000",
        nameid : "hofN7-1",
        props : {
            id : "properties"
        },
        rotation : "0.0000",
        type : "square",
        uid : "Av2EZQh",
        w : "50.0000",
        x : "20.0000",
        y : "20.0000"
    },
    {
        bodytype : "dynamic",
        h : "50.0000",
        nameid : "hofN7-2",
        props : {
            gravMassScale : "2",
            id : "properties",
            inertia : "2",
            isBullet : true,
            torque : "2",
            velocity : {
                x : "2",
                y : "2"
            }
        }
    }
...
4

3 回答 3

1

如果您正在寻找接近 JS 存储对象的方式,您可以尝试 JSONObject 类:

http://json.org/javadoc/org/json/JSONObject.html

撇开语法到语法的映射不谈,从工程的角度来看,我会将关卡存储在关卡的映射中,如下所示:

HashMap<String, Level> myLevels = new HashMap<String, Level>();
于 2013-05-01T10:47:26.210 回答
0

使用这个调整后的 JSON 版本并使用jsonschema2pojo创建类:

{
  "Levels":{
    "shapes":[
    {
      "bodytype" : "dynamic",
      "h" : "50.0000",
      "nameid" : "hofN7-1",
      "props" : {
          "id" : "properties"
      },
      "rotation" : "0.0000",
      "type" : "square",
      "uid" : "Av2EZQh",
      "w" : "50.0000",
      "x" : "20.0000",
      "y" : "20.0000"
    },
    {
      "bodytype" : "dynamic",
      "h" : "50.0000",
      "nameid" : "hofN7-2",
      "props" : {
        "gravMassScale" : "2",
        "id" : "properties",
        "inertia" : "2",
        "isBullet" : "true",
        "torque" : "2",
        "velocity" : {
          "x" : "2",
          "y" : "2"
        }
      }
    }]
  }
}

检查JSON转换并根据需要选择其他选项。您可以在 Java 项目中下载和使用转换后的类。

希望这会有所帮助......干杯!

于 2013-05-01T11:00:35.733 回答
0

正如评论者所写,您可以使用 aMap在 Java 中创建等效对象。但是,此映射中的值具有不同的类型。有些会是Strings。有些是某种类型的数组Object。有些人会Map自己。

您可以使用的唯一集合对象是Map<String, Object>,然后您需要在instanceof每次使用它时进行检查。这会很笨拙。

您可以使用 JSON 绑定库,例如 Jackson。请参阅http://wiki.fasterxml.com/JacksonHome。这有一种模式,您可以创建一个类,Levels并注释其实例变量,以便杰克逊可以将实例转换为 JSON 并返回。但是你需要知道你的班级结构。Jackson 有一种可以使用无类型地图的模式。

最后,您可以Levels通过将其视为树并使用复合模式来进行建模。您将有一个Node包含名称的抽象类和具体的子类IntegerNode,如StringNode, DoubleNode, MapNode, 和ArrayNode.

于 2013-05-01T10:53:24.690 回答