4
在Android中,我們通常會將所有狀態變量保存在onSaveInstanceState()
回調中,方法是將它們置於Bundle
提供的位置。在Android上的libgdx中,如何保存遊戲狀態以防應用程序被終止?
人們如何應對保存/載入遊戲狀態變量與libGDX
作爲類無法使用/返回Bundle
對象?
在Android中,我們通常會將所有狀態變量保存在onSaveInstanceState()
回調中,方法是將它們置於Bundle
提供的位置。在Android上的libgdx中,如何保存遊戲狀態以防應用程序被終止?
人們如何應對保存/載入遊戲狀態變量與libGDX
作爲類無法使用/返回Bundle
對象?
這簡直太簡單了!您可以使用Preferences。您可以將值存儲在首選項中。在Android上,後端使用Android本身的SharedPreferences。在桌面上,它保存爲用戶文件夾中某處的xml。
我寫了一個簡單的助手來保存選項並獲得我的遊戲選項。這裏有一些代碼。 (注意,不要忘記在保存之後刷新)
public class PreferencesHelper {
public final static String PREF_NAME_OPTION = "options";
private final static String VOLUMEN = "volumen";
private final static String VIBRATE = "vibrate";
private final static String EFFECT_VOLUMEN = "effect";
private final static String FIRST_START = "start";
private Preferences optionPref = Gdx.app.getPreferences(PREF_NAME_OPTION);;
public PreferencesHelper() {
optionPref = Gdx.app.getPreferences(PREF_NAME_OPTION);
}
public float getVolumen() {
return optionPref.getFloat(VOLUMEN);
}
public void setVolumen(float vol) {
optionPref.putFloat(VOLUMEN, vol);
optionPref.flush();
}
public boolean getVibrate() {
return optionPref.getBoolean(VIBRATE);
}
public void setVibrate(boolean vibr) {
optionPref.putBoolean(VIBRATE, vibr);
optionPref.flush();
}
public float getEffectVolumen() {
return optionPref.getFloat(EFFECT_VOLUMEN);
}
public void setEffectVolumen(float eff) {
optionPref.putFloat(EFFECT_VOLUMEN, eff);
optionPref.flush();
}
}
這是我如何保存我的選項。要保存一個角色,你可以做同樣的事情,但要保存所有需要的重要資料,以便在再次加載遊戲時重新創建角色。你也可以有多個prefrerence!
我希望這有助於。
好吧,這是有道理的。因此,當應用程序被終止並重新創建時,我假定您檢查savedInstanceState Bundle是否爲空,並將該信息傳遞給ApplicationListener以確定是否從Preferences中加載遊戲狀態? – 2013-04-23 07:48:30
我其實不關心saveInstanceBundle,也不知道我是否可以在libgdx中捕獲它。可能不會。如果它被殺死了,它就會被創建,並且我從Preferences中獲得狀態作爲正常開始。如同你從普通的android中知道的那樣,或多或少有像Main活動那樣的不同的方法,如create(),resume()stop()。它內部的核心項目和擴展遊戲,實際上是一個ApplicationListener它確實有回調,如果我得到的權利。 http://libgdx.l33tlabs.org/docs/api/com/badlogic/gdx/Game.html。但這是保存字符狀態的正常方法,e – BennX 2013-04-23 11:48:54
沒問題,謝謝,但這並不能真正回答我的問題。 – 2013-04-23 12:43:43