1

ゲームに「保存」と「読み込み」のオプションが必要なJavaでスネークゲームをシリアライズしようとしています。エラーは発生しませんが、 lifestimeなどを印刷しようとするたびに、lifesと time が0になるはずがないときに0が返されます。

保存部分と読み込み部分のコードの一部を次に示します。

  public void SaveGame() throws IOException {

    PnlCentro pnlCentro = new PnlCentro();

    FileOutputStream fileOut = new FileOutputStream(fileName);
    ObjectOutputStream out = new ObjectOutputStream(fileOut);
    out.writeObject(pnlCentro);
    out.close();
}

public void LoadGame() throws FileNotFoundException, IOException, ClassNotFoundException {

    PnlCentro p = null;

    FileInputStream fileIn = new FileInputStream(fileName);
    ObjectInputStream in = new ObjectInputStream(fileIn);

    p = (PnlCentro) in.readObject();

    System.out.println("Body: " + p.vecBody);
    System.out.println("Life: " + p.life);
    System.out.println("Timer: " + p.getTime());

    in.close();
    fileIn.close();

}
4

2 に答える 2

3

SaveGame()メソッドとメソッドは完全に機能すると思いますLoadGame。現在のゲームセッションからデータを保存またはロードしないだけです。

  public void SaveGame() throws IOException {

    PnlCentro pnlCentro = new PnlCentro(); //<-- Problem likely lies here!

    FileOutputStream fileOut = new FileOutputStream(fileName);
    ObjectOutputStream out = new ObjectOutputStream(fileOut);
    out.writeObject(pnlCentro);
    out.close();
}

pnlCentroメソッドの初期化行に注意してくださいSaveGame()。オブジェクトは、デフォルトのコンストラクターで宣言およびインスタンス化されます。現在のゲーム データでオブジェクトをインスタンス化するためにデフォルトのコンストラクターをオーバーライドしていない限りpnlCentro、現在のゲーム データはディスクに書き出される前に設定されることはありません。

このことを考慮:

  public void SaveGame() throws IOException {

    PnlCentro pnlCentro = new PnlCentro();

    /* Set data prior to writing out */
    pnlCentro.setLives(getThisGamesNumLives());
    pnlCentro.setTime(getThisGamesTime());

    FileOutputStream fileOut = new FileOutputStream(fileName);
    ObjectOutputStream out = new ObjectOutputStream(fileOut);
    out.writeObject(pnlCentro);
    out.close();
}
于 2013-01-19T00:21:20.357 に答える
2

SaveGame メソッドでは、次のコードを使用する場合、シリアル化する前に常に PnlCentro の新しいインスタンスを作成します。

PnlCentro pnlCentro = new PnlCentro();

シリアライゼーションの前にオブジェクト plnCentro のデフォルト値に変更はありません。デシリアライゼーション後にゼロを読み取っているのはおそらくそのためです。

于 2013-01-19T00:21:05.200 に答える