如何在 libGDX 上保存高分

Posted

技术标签:

【中文标题】如何在 libGDX 上保存高分【英文标题】:How to save a highScore on libGDX 【发布时间】:2019-09-06 08:04:28 【问题描述】:

我想在我用 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();
    

很遗憾,每次开始新游戏时,我的高分都会重置。 我的错误在哪里?我希望我的问题不是太愚蠢,并且我不会在这里忘记我的代码中的某些内容。在那种情况下请原谅我。

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

【问题讨论】:

【参考方案1】:

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

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

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

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

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

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

prefs.putInteger("highscore", 10);

编辑后确保保存:

prefs.flush();

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

prefs.getInteger("highscore", 0);

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

【讨论】:

【参考方案2】:

实际上,您并没有在应用程序实例上下文之外的任何地方持久化highScore。关闭游戏后,GameData 中的 private 字段将被销毁。想想您 PC 上的 Word 文档窗口,以及如果您突然关闭计算机会发生什么 - 重新启动后它会随着内容一起消失,除非您将其保存到 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

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

【讨论】:

以上是关于如何在 libGDX 上保存高分的主要内容,如果未能解决你的问题,请参考以下文章

LibGDX:安卓游戏安全

Java - Libgdx:保存和加载屏幕

如何在 cocos2d iphone 游戏中保存高分和加载高分

如何快速保存高分

如何在 libgdx 中创建一个新文件?

如何在swift3中覆盖高分