首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >生成带有嵌套数组的JSON文件,用于加载游戏关卡

生成带有嵌套数组的JSON文件,用于加载游戏关卡
EN

Stack Overflow用户
提问于 2014-07-06 04:30:54
回答 1查看 352关注 0票数 1

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

我想要像这样的东西;

--级别

-Wave

-Enemy (enemyType,spawnTime)

例如:level2.wav3.enemy1.enemyType应该返回enemyType。

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

EN

回答 1

Stack Overflow用户

发布于 2014-07-17 22:52:02

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

代码语言:javascript
复制
Enemy e = new Skeleton();

不能使用JSON序列化,然后再读取。您必须采取一种变通办法,比如保存类名的字符串,然后通过下面这样的方式加载它

代码语言:javascript
复制
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);

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

代码语言:javascript
复制
class Enemy {
    String className;
    int spawnTime;
}

class Wave {
    Enemy[] enemies;
}

class Level {
    Wave[] waves;
}

然后创建你的关卡:

代码语言:javascript
复制
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的更多信息)。

代码语言:javascript
复制
Json json = new Json();
System.out.println(json.prettyPrint(l));

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

代码语言:javascript
复制
Json json = new Json();
String text = json.prettyPrint(l);
Level level = json.fromJson(Level.class, text);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24590329

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档