3

そこでSaveAndLoad、次のようなクラスを構築しました。

public class SaveAndLoad {
    public Preferences pref;
    public final String path = "Highscore";

    public SaveAndLoad() {
        pref = Gdx.app.getPreferences("Gametitle");
    }

    public void saveInt(int value) {
        pref.putInteger(path, value);
        pref.flush();
    }

    public int getInt() {
        return pref.getInteger(path);
    }
}

ハイスコ​​アを保存しようとするときは を呼び出しsaveInt(highscore)、ゲームを再びオンにすると を呼び出しますgetInt

    constructor(){
        SaveAndLoad sdRemote = new SaveAndLoad ();
        try {
            highscore = sdRemote.getInt();
      } catch (NullPointerException e) {
            highscore = 0;
      }
    }

問題は、以前のゲームの後にゲームを再開すると、ハイスコアが読み込まれず、ゼロが返されることです...

マニフェストの許可を行いました:

ありがとう///ダニエル

Ps。最後の回答では、一部のデバイスで動作すると言いましたが、後でそうではないことがわかりました。

4

3 に答える 3

5

次のようなデータを必ず取得してください。

SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
int silent = settings.getInt("score", 0);

そして、次のように保存します。

  SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
  SharedPreferences.Editor editor = settings.edit();
  editor.putInt("score", playerScore);
  // Commit the edits!
  editor.commit(); //<----------

編集:

ああ、あなたはGDXを使用しています。その場合、GDX の初期化後にこのクラスを初期化していることを確認してください。Gdx.app.getPreferences("Game");が null を返すかどうかを確認します。

編集2:

わかりましたので、特定のデバイスの Gdx に問題があることを確認しました (これは最悪です)。

デスクトップと Android デバイスの両方でこれを機能させる必要がある場合は、別の方法があります。ゲームを Android で動作させたい場合は、データの保存に Gdx を使用しないでください。

GDX And​​roid インターフェイスと呼ばれるものを使用することをお勧めします。このようにして、この回答で使用したネイティブの Android 呼び出しを使用して、Android デバイスでのデータの保存を自分で処理できます。これは簡単ではありませんが、ここにチュートリアルがあります。

https://code.google.com/p/libgdx-users/wiki/IntegratingAndroidNativeUiElements3TierProjectSetup

于 2013-03-09T14:44:03.017 に答える
2

これからデータを保存および取得できます。

クラスメソッドの次のコード。

public class SaveAndLoad {
        public SharedPreferences pref;
        public final String path = "Highscore";

        public SaveAndLoad() {
            pref = Gdx.app.getSharedPreferences("Gametitle",MODE_PRIVATE);
        }

        public void saveInt(int value) {
        Editor edit = pref.edit();
            edit.putInt(path, value);
            edit.commit();
        }

        public int getInt() {
            return pref.getInt(path,0);
        }
}

ハイスコ​​アを保存します。

int highscore = 0;
SaveAndLoad sdRemote = new SaveAndLoad ();
        try {
        highscore = sdRemote.getInt();
    } catch (NullPointerException e) {
        e.printStackTrace();
    }

HighScoreを取得します。

int highscore = 255;
SaveAndLoad sdRemote = new SaveAndLoad ();
        try {
        sdRemote.saveInt(highscore);
    } catch (NullPointerException e) {
        e.printStackTrace();
    }

このコードは私にとって適切に機能します。これを使用すると、あなたにとって役立つと確信しています。

于 2013-03-22T17:07:25.707 に答える
0

その音から、あなたはすべてを正しく行っているので、問題のデバイスをテストするオプションが残されています. デバイスで次のアプリケーション リスナーを実行し、デバイスでアプリケーションを実行するたびに MyValue が増加しているかどうかを確認できます。

public class PrefTest implements ApplicationListener {
    @Override public void create() {
        final Preferences pref = Gdx.app.getPreferences("TestApp");
        int value = pref.getInteger("MyValue", 0);
        Gdx.app.log("MyValue", Integer.toString(value));
        value++;
        pref.putInteger("MyValue", value);
        pref.flush();
    }

    @Override public void render() {}

    @Override public void dispose() {}

    @Override public void resize(final int width, final int height) {}

    @Override public void pause() {}

    @Override public void resume() {}
}

アプリケーションを起動するたびに、LogCat の値が増加するはずです。例:アプリをインストールして実行、バックアウトしてアイコンから起動、バックアウトして起動を繰り返す。これが機能する場合、問題はコードに関係していることがわかります。これで問題が解決しない場合は、問題が LibGDX または電話自体にあることがわかります。

于 2013-03-17T18:34:45.670 に答える