如何在 libGDX 上保存高分

How to save a highScore on libGDX

我想在用 libGDX 制作的游戏中保存高分。

我尝试使用本教程: http://niklasnson.com/programming/network/tips%20and%20tricks/2017/09/15/libgdx-save-and-load-game-data.html

这是我的代码:

GameData.class :

public class GameData {

    private static double highScore;

    public static double getHighScore() {
        return highScore;
    }

    public static void setHighScore(double hs) {
        highScore = hs;
    }
}

PlayState.class :

    @Override
    public void render(SpriteBatch sb) {
[...]
        if(GameData.getHighScore() < score) {
            GameData.setHighScore(score);

        }
[...]
        sb.end();
    }

MenuState.class :

public class MenuState extends State {
    private BitmapFont font = new BitmapFont();
    private String HS = String.valueOf(GameData.getHighScore());
    DecimalFormat df = new DecimalFormat("#.#");

    @Override
    public void render(SpriteBatch sb) {
        sb.begin();
        [...]
        font.draw(sb, "Score : " + HS, 20, 400);
        sb.end();
    }
}

不幸的是,每次开始新游戏时我的高分都会重置。 我的错误在哪里?我希望我的问题不是太愚蠢,并且我不会忘记我的代码中的某些内容。那样的话还请见谅

非常感谢您。 最好的祝福, 特内西弗

你永远不会保存高分,你只是将它存储在一个变量中。 您正在使用静态变量,但在重新启动程序后不会保存这些变量。

我认为 LibGDX 偏好就是您要搜索的内容。

您可以在他们的 wiki 中阅读 here

更新您的 setHighscoreMethod: 首先放在这一行:

Preferences prefs = Gdx.app.getPreferences("My Preferences");

之后你就可以开始存储你的高分了,例如:

prefs.putInteger("highscore", 10);

编辑完成后务必保存:

prefs.flush();

您还必须更新 getHighscore 方法。 要读取保存的高分,只需调用:

prefs.getInteger("highscore", 0);

那么0就是没有保存高分时应该返回的值。

实际上,您并没有在应用程序实例上下文之外的任何地方持久化 highScore。您的GameData中的private字段将在您关闭游戏后立即销毁。想一想您 PC 上的 Word 文档 window 如果您突然关闭计算机会发生什么情况 - 它会在重新启动后连同内容一起消失,除非您 将其保存到 HDD

要将对象保存到 LibGDX 中的持久内存中,您可以使用 Preferences

Preferences prefs = Gdx.app.getPreferences("My Preferences");

// Persist some value 
prefs.putString("name", "Donald Duck");
prefs.flush();

// And load it after application restart (or event without restart)
String name = prefs.getString("name", "No name stored"); // 'No name stored' is default value in case such key does not exist

您还可以实施一些 服务来保持您的游戏状态(甚至在设备之间共享),例如来自 Shephertz(AppWarp 的创建者)的 Saved Games from Google Services or App42 API