如何在 libGDX 上保存高分
How to save a highScore on libGDX
我想在用 libGDX 制作的游戏中保存高分。
这是我的代码:
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
我想在用 libGDX 制作的游戏中保存高分。
这是我的代码:
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