【问题标题】:Generating a JSON file with nested arrays for loading a game level生成带有嵌套数组的 JSON 文件以加载游戏关卡
【发布时间】:2014-07-05 20:30:53
【问题描述】:

我想从我的塔防游戏的 json 文件中加载关卡。我尝试了许多 json 生成器网站,但无法得到我想要的确切内容。

我想要类似的东西;

-- 等级

----波浪

------敌人(enemyType,spawnTime)

例如:level[2].wave[3].enemy[1].enemyType 应该返回enemyType。

关卡由波浪组成,波浪由敌人组成。所有敌人都有一个 2 个变量,即enemyType 和 spawnTime。

【问题讨论】:

  • 你现在有什么问题?为什么不自己写 JSON?
  • 使用 libgdx 的 Json 类。在代码中创建结构,然后执行 Json.toJson(level, Level.class, file);
  • 谢谢大家,这对于复杂的层次结构真的很有意义,这将是更好的方法。

标签: arrays json libgdx


【解决方案1】:

这不是一项艰巨的任务。但是,JSON 不会处理抽象类/接口的实现。也就是说,

Enemy e = new Skeleton();

不能用 JSON 序列化然后读取。您将不得不采取一种解决方法,例如保存类名的字符串,然后通过类似的方式加载它

Class clazz = Class.forName("com.my.cool.package.enemy." + "Skeleton");
Enemy e = (Enemy) clazz
.getConstructor(Vector2.class, int.class)
.newInstance(new Vector2(0, 10), 5);

好的,回到主要问题,这样做:

class Enemy {
    String className;
    int spawnTime;
}

class Wave {
    Enemy[] enemies;
}

class Level {
    Wave[] waves;
}

然后创建你的关卡:

Level l = new Level();
l.waves = new Wave[1];
l.waves[0].enemies = new Enemies[1];

l.waves[0].enemies[0] = new Enemy();
l.waves[0].enemies[0].className = "Skeleton";
l.waves[0].enemies[0].spawnTime = 5;

不要忘记导入 libgdx JSON(有关wiki 的更多信息)。

Json json = new Json();
System.out.println(json.prettyPrint(l));

这应该会打印出您的关卡,只需使用 json.toJson(l) 来获得较小的输出。 (但不是那么漂亮。)要加载它,请使用:

Json json = new Json();
String text = json.prettyPrint(l);
Level level = json.fromJson(Level.class, text);

【讨论】:

    猜你喜欢
    • 2011-11-10
    • 2017-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-14
    • 2014-01-24
    • 1970-01-01
    相关资源
    最近更新 更多