很抱歉,如果之前有人问这个问题,但是我要么找不到,要么无法理解人们比我更苛刻的解决方案。
所以,我有一个需要游戏保存功能的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 id),load(int id),delete(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。但是,当我保存它,关闭游戏,重新启动它,加载保存并开始打印时,它会打印出null,这甚至不是起始值,所以我很困惑。
任何帮助将不胜感激,并提前感谢!
-Hummus
答案 0 :(得分:0)
静态变量未被序列化,因此在反序列化期间,静态变量值将从类中加载。
因此,在加载数据时,变量中的null为null,因为此时类变量为null(将加载当前值)。