生成具有嵌套数组的JSON文件以加载游戏级别

时间:2014-07-05 20:30:54

标签: arrays json libgdx

我想为我的塔防游戏加载json文件中的关卡。我尝试了很多json生成器网站,但我无法得到我想要的东西。

我想要类似的东西;

- 等级

----波

------ Enemy(enemyType,spawnTime)

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

水平由波浪组成,波浪由敌人组成。所有敌人都有一个2变量,分别是enemyType和spawnTime。

1 个答案:

答案 0 :(得分:0)

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

Enemy e = new Skeleton();

无法使用JSON序列化然后阅读。您必须制定一个解决方法,例如保存类名的String,然后通过类似

的方式加载它
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);