我想创建一个Java游戏并让它记住一个对象。每次重新运行游戏时,该对象将被重新初始化,我会失去所有已存储的数据。是否有办法阻止Java销毁我的对象,并在需要时引用它(即获取对象的内存地址)?
我想创建一个Java游戏并让它记住一个对象。每次重新运行游戏时,该对象将被重新初始化,我会失去所有已存储的数据。是否有办法阻止Java销毁我的对象,并在需要时引用它(即获取对象的内存地址)?
您可以将对象序列化到文件中,然后再读取它。您的对象需要实现Serializable接口。然后只需执行以下操作:
public class MyData implements Serializable{
int data;
public MyData (int data) {
this.data = data;
}
}
假设我们想保存MyData对象。这里是一个简单的测试:
public static void main(String[] args) throws Exception {
MyData data = new MyData(5);
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("myobject.ser"));
oos.writeObject(data);
oos.close();
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("myobject.ser"));
data = (MyData) ois.readObject();
System.out.println(data.data);
}
请记住,如果您想序列化对象,则该对象的所有字段都必须实现Serializable接口。此外,您不能稍后编辑类,因为读取对象将导致异常,因为它不会是相同的对象。
您可以在此处找到有关序列化的更多信息:https://docs.oracle.com/javase/tutorial/jndi/objects/serial.html
当JVM停止时,所有分配的对象都将被释放。
因此,在应用程序内部处理持久性以避免在关闭时丢失应用程序状态。
在具有状态持久性的游戏开发中,我们通常有两种保存类型:
第一种允许玩家检索接近其上次进度的状态,而不必担心显式保存其派对。 自动保存由选择相关时间进行自动保存的游戏设计师决定。
第二种允许玩家在想要保存时保存其存档。
关于如何保存游戏信息,您有多种方式可以实现。
以下是三种简单标准的方法:
如果您想要在应用程序外部轻松读取和修改数据,应该使用人类可读的数据格式,例如XML或JSON。
如果您不希望数据易于阅读,则可以使用标准Java序列化。
如果您需要强大的性能,则应使用第三方库快速序列化来执行序列化操作。
对于在线游戏,使用数据库是相关的,但对于离线游戏来说,它往往是过度的。