【发布时间】:2017-06-29 06:15:23
【问题描述】:
很抱歉,如果以前有人问过这个问题,但我要么找不到,要么无法理解比我更聪明的人给出的解决方案。
所以,我有一个需要游戏保存功能的 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();
}
}
现在,它会将游戏数据保存到 save(whatever number).sav 文件中,但它不会跟踪对 GameData 所做的任何更改。例如,当我将名称 String 设置为“derp”并打印它时,它会打印 derp。但是当我保存,关闭游戏,重启,加载保存,开始打印时,会打印出null,这甚至不是起始值,所以我很困惑。
任何帮助将不胜感激,并在此先感谢!
-鹰嘴豆泥
【问题讨论】:
-
静态字段在 Java 中没有序列化。