LibGDX: сохранение пользовательских данных через класс GameOverScreen в файле json и создание текстового поля - PullRequest
0 голосов
/ 10 января 2019

Я пытаюсь запрограммировать что-то вроде Flappy Bird в LibGDX. Сейчас я хочу реализовать класс GameOverScreen, который показывает различные функции: score, highscore, placement и name проигрывателя.

Я уже реализовал score как public static int score = 0;. Каждый раз, когда моя фигура проходит мимо объекта, счет увеличивается на единицу.

В моем классе Tower у меня есть следующий метод:

public boolean collides(Wizard wizard) {
    if (position.x < wizard.getX() + wizard.getWidth()) {
        return (Intersector.overlaps(wizard.getBoundingRectangle(), barUp)
                || Intersector.overlaps(wizard.getBoundingRectangle(), barDown));
    }
    return false;
}

Таким образом, каждый раз, когда Волшебник сталкивается с объектом, должен появляться GameOverScreen.

Если пользователь достиг более высокого score, то highscore = GameWorld.score;, который я подумал реализовать как метод:

Кроме того, должно появиться текстовое поле, в котором пользователь может написать свое имя и затем сохранить его.

Для сохранения данных мне нужно создать файл с именем «highscore.json», который должен содержать информацию о размещении, имени игрока и достигнутом счете в JSON-формате. Чтобы изменить данные в файле "highscore.json", я должен использовать Gson.

У меня проблема в том, что я не знаю, что именно нужно записать в классе GameOverScreen (например, как создать текстовое поле в LibGDX и как заставить экран открываться после столкновения ) до

  • получить рекорд в виде текста
  • получить место размещения и позволить пользователям написать свое имя
  • сохранить данные в формате JSON (чтобы их можно было редактировать)

потому что я не слишком знаком с LibGDX и никогда не работал с файлами JSON.

Мне не удалось найти подходящий класс GameOver в Google / GitHub и т. Д., Потому что они были слишком конкретными.

Может кто-нибудь мне помочь?

1 Ответ

0 голосов
/ 10 января 2019

Чтобы получить рекорд в виде текста, вам просто нужно преобразовать его в строку

int highScore = 10;
string highScoreText = String.valueOf(highScore);

Чтобы получить место игрока, вам нужно извлечь все сохраненные высокие баллы и оценить их (вы можете легко добиться этого с помощью Arrays.Sort , обратите внимание, что они будут упорядочены в порядке возрастания , вы хотите убежать .. затем вы можете просто перебрать массив в обратном порядке, чтобы получить более высокий балл в первой позиции)


Чтобы позволить пользователю написать свое собственное имя, это немного сложнее. Вам понадобится пользовательский интерфейс Libgdx Scene2D. Я не знаю, используете ли вы это в данный момент, но если вы этого не сделаете, это потребует некоторых структурных изменений в вашем коде.

После того, как вы выяснили, как переводить в систему сцены и работать с актерами, вы можете добавить все элементы управления, предлагаемые пользовательским интерфейсом Scene2D:

  • Кнопка
  • Диалог
  • TextField
  • намного больше ..

Чтобы сохранить данные в формате Json, вы можете использовать Json API, который поставляется с LibGDX. Взгляните на эту тему Пишите в Json, используя libGDX

...