[英]Is there any way I can stop java from destroying an object
我想创建一个java游戏并让它记住一个对象。 每当我重新运行游戏时,对象都会重新初始化并丢失我存储的所有数据。 有什么办法可以阻止java破坏我的对象并随时引用它,即获取对象的内存地址?
您必须实现存储游戏状态的功能。
当您再次启动时,应重新创建此已保存状态。
作为一些解决方案,您可以使用Serialisation
。
BTW您可以使用常见的游戏快捷方式来保存和撤退状态:
F5
保存游戏状态 F9
恢复保存状态 此外,您可以查看State GoF模式
您可以将对象序列化为文件,然后将其读回。 您的对象需要实现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
关闭应用程序时,操作系统将释放应用程序初始化(已分配)的所有内存。 因此,如果要在关闭应用程序后找到对象,则必须对其进行序列化。 这意味着对象必须保存为文件中的一个字节,当您的应用程序再次启动时,您可以从文件中将其初始化。 请阅读https://www.tutorialspoint.com/java/java_serialization.htm
您可以使用ObjectInputStream和ObjectOuputStream来读取和保存Object的信息。
当JVM停止时,将释放所有已分配的对象。
因此,您必须在应用程序内部处理持久性,以避免在关闭时丢失应用程序的状态。
在具有状态持久性的游戏开发中,我们通常有两种类型的保存:
第一个允许玩家从他的上一次进度中检索一个状态,而不必担心明确保存其方。 自动保存由游戏设计者决定,选择相关的自动保存时间。
第二个允许玩家在他想要的时候保存它的保存。
关于保存游戏信息的方法,您有多种方法可以执行此操作。
以下是3种简单而标准的方法:
如果您希望在应用程序之外提供易于阅读和修改的数据,则应该支持使用人类可读的数据语言,如XML或JSON。
如果您不希望数据是人类可读的,则可以使用标准的Java序列化 。
如果需要具有强大的性能,则应使用第三个库作为快速序列化来执行序列化。
使用数据库与在线游戏相关,但对于离线游戏,通常是开销。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.