我想为我的塔防游戏加载json文件中的关卡。我尝试了很多json生成器网站,但我无法得到我想要的东西。
我想要类似的东西;
- 等级
----波
------ Enemy(enemyType,spawnTime)
例如:level [2] .wave [3] .enemy [1] .enemyType应返回enemyType。
水平由波浪组成,波浪由敌人组成。所有敌人都有一个2变量,分别是enemyType和spawnTime。
答案 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);