#arrays #json #libgdx
#массивы #json #libgdx
Вопрос:
Я хочу загрузить уровни из файла json для моей игры tower Defense.Я перепробовал множество веб-сайтов-генераторов json, но не смог получить именно то, что мне нужно.
Я хочу что-то вроде ;
— Уровень
—-Волна
——Враг (EnemyType,время появления)
Например: level[2].wave[3].enemy[1].EnemyType должен возвращать EnemyType.
Уровни состоят из волн, а волны состоят из врагов. У всех врагов есть две переменные: EnemyType и spawnTime.
Комментарии:
1. И в чем теперь ваш вопрос? Почему бы вам самому не написать JSON?
2. Используйте
Json
класс libgdx. Создайте структуру в коде, а затем просто выполните Json.toJSON(уровень, Level.class , файл);3. Спасибо, никто, это действительно имеет смысл для сложных иерархий, это был бы лучший способ.
Ответ №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);