如何在 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 上保存高分的主要内容,如果未能解决你的问题,请参考以下文章