libGDX:使用偏好进行高分
问题描述:
我知道我以前曾问过这个类似的问题,但我没有更多的答案......我想,只要我在比赛中输了,就会显示我的高分。下面是代码:libGDX:使用偏好进行高分
protected Preferences HighScore() {
if (score > highscore) {
prefs.putInteger("highscore", score);
this.highscore = prefs.getInteger("highscore", 0);
prefs.flush();
}
return prefs;
}
但是,如果我跑我的应用程序,只显示此错误:
Exception in thread "LWJGL Application" java.lang.NullPointerException
at de.firstdemo.game.states.PlayState.HighScore(PlayState.java:641)
at de.firstdemo.game.states.PlayState.render(PlayState.java:601)
at de.firstdemo.game.states.GameStateManager.render(GameStateManager.java:50)
at de.firstdemo.game.RiskyDemo.render(RiskyDemo.java:37)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:225)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:126)
我看了在网上也没有找到任何解决办法...
感谢您的回答! :)
答
首先,你得到的对象:
Preferences preferences = Gdx.app.getPreferences("My preferences");
然后,当你在你的游戏中输了,你得到的价值。我通常使用布尔值检查是否在render方法中丢失。在这种情况下你当前的分数比较你的高分:
if(IsGameFinished)
{
int highscore = preferences.getInteger("High score",0);
if(highscore>=yourCurrentScore)
{
// display highscore
}
else
{
// display yourCurrentScore
preferences.putInteger("High score", yourCurrentScore);
preferences.flush();
}
}
此外,在你的代码中有一个错误:
protected Preferences HighScore() {
if (score > highscore) {
prefs.putInteger("highscore", score);
prefs.flush(); // YOU SHOULD FLUSH BEFORE!
this.highscore = prefs.getInteger("highscore", 0);
}
return prefs;
}
而且,你为什么返回首?作为一个整数返回你的高分应该更好。