如果之前有人问过这个问题,我很抱歉,但我要么找不到它,要么就是不能理解比我更优秀的人给出的解决方案。
所以,我有一个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 = "";
}
}我使用一个名为Loadevas的类,使用静态方法save(int )、load(int )、delete(int )和saveFileExists(int ),每个方法都以它们的名字命名。这就是它:
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所做的任何更改。例如,当我将name字符串设置为" derp“并打印它时,它将打印derp。然而,当我保存它,关闭游戏,重新启动它,加载保存,并开始打印时,它将打印出null,这甚至不是起始值,所以我非常困惑。
如有任何帮助,我们将不胜感激,并提前表示感谢!
-Hummus
发布于 2017-06-29 15:02:44
静态变量不是序列化的,所以在反序列化期间,静态变量的值将从类中加载。
因此,当加载数据时,你在变量中得到了null,因为那时类变量为null(当前值将被加载)。
https://stackoverflow.com/questions/44817609
复制相似问题