2017-10-19 208 views
0

我知道我以前曾问过这个类似的问题,但我没有更多的答案......我想,只要我在比赛中输了,就会显示我的高分。下面是代码: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) 

我看了在网上也没有找到任何解决办法...

感谢您的回答! :)

回答

0

首先,你得到的对象:

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; 
} 

而且,你为什么返回首?作为一个整数返回你的高分应该更好。