2017-10-19 211 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; 
} 

而且,你爲什麼返回首?作爲一個整數返回你的高分應該更好。