2017-06-29 20 views
0

申し訳ありませんこれまでに尋ねられたことがありましたが、私はそれを見つけることができませんでした。Java保存クラスが保存されていません

私はゲームセーブの機能を必要とするlibgdxゲームを持っています。私はゲームデータをすべてGameDataクラスに格納し、.savファイルを持つファイルに保存するための静的な静的変数をたくさん用意しておくことにしました。ここで

がGameDataクラスです:

package Game; 

import java.io.Serializable; 

public class GameData implements Serializable 
{ 
    private static final long serialVersionUID = 1; 

    public static String name; 
    public static String currentWeapon; 

    public static void init() 
    { 
    name = ""; 
    currentWeapon = ""; 
    } 
} 

は、私は(int型のID)を保存静的メソッドで、Loadevasというクラスを使用し、負荷(int型のID)、(int型のID)を削除し、saveFileExists(int型id)、それぞれが名前を付けられたことをしています。ここでは、次のとおりです。

public class Loadevas 
{ 
    public static GameData gd; 

    public static void save(int id) 
    { 
     try{ 
      ObjectOutputStream out = new ObjectOutputStream(
        new FileOutputStream("save" + id + ".sav")); 
      out.writeObject(gd); 
      out.flush(); 
      out.close(); 
     }catch(Exception e) 
     { 
      e.printStackTrace(); 
      Gdx.app.exit(); 
     } 
    } 

    public static void load(int id) 
    { 
     try{ 
      if(saveFileExists(id)) 
      { 
       ObjectInputStream in = new ObjectInputStream(
         new FileInputStream("save" + id + ".sav")); 
       gd = (GameData) in.readObject(); 
       in.close(); 
      } 
     }catch(Exception e) 
     { 
      e.printStackTrace(); 
      Gdx.app.exit(); 
     } 
    } 

    public static void delete(int id) 
    { 
     try{ 
      if(saveFileExists(id)) 
      { 
       File f = new File("save" + id + ".sav"); 
       f.delete(); 
      } 
     }catch(Exception e) 
     { 
      e.printStackTrace(); 
      Gdx.app.exit(); 
     } 
    } 

    public static boolean saveFileExists(int id) 
    { 
     File f = new File("save" + id + ".sav"); 
     return f.exists(); 
    } 
} 

今、それは、保存(どんな数)がSAVファイルにゲームデータが保存されますが、それはGameDataに対して行われた変更を追跡しません。例として、Stringという名前を "derp"に設定して印刷すると、derpが出力されます。しかし、私はそれを保存し、ゲームを閉じ、再起動し、保存をロードし、印刷を開始すると、開始値でもないヌルが印刷されるので、非常に混乱します。

ご協力いただきありがとうございます。

-Hummus

+1

静的フィールドはJavaでシリアル化されません。 – Henry

答えて

0

静的変数はシリアライズさではないので、直列化復元時に静的変数値は、クラスからロードされます。

したがって、データをロードするときには、その時点でクラス変数がnull(現在の値がロードされる)なので、変数にnullがあるとします。

+1

O.o、ありがとう! – HummusHu

関連する問題