如何为JavaFX游戏创建保存功能?

时间:2015-05-31 06:52:47

标签: javafx

我正在使用JavaFX制作一个简单的游戏。 就像旧的口袋妖怪游戏一样,我想制作保存/加载功能,以便用户在重启计算机后继续游戏。

2 个答案:

答案 0 :(得分:1)

这个问题有点宽泛;但只要您使用JavaFX 8,我建议您查看NIO.2 tutorial。它是所有I / O API中最新的,专为快速而设计。具体来说,PathsFiles类具有允许您将数据快速保存到文件中并将其读回的方法。

对于格式,由于您不习惯于提交I / O,请尽量保持简单。标记数据通常最好,而不仅仅是将其存储在二进制文件中;主要是为了后来的多功能性和灵活性。 (游戏中的微小变化不应使整个文件格式无效。)

例如,您可以使用以下命令获取对该文件的引用:

String dir = ...;
String name = ...;
Path savePath = Paths.get(dir + File.separator + name);

完成路径后,请使用:

BufferedWriter writer = Files.newBufferedWriter(savePath, StandardOpenOption.CREATE);

从那里,您可以使用BufferedWriter来编写数据,就像使用System.out一样简单。一定要检查javadoc,有很多方法需要注意。节省你一些时间。同样,您可以使用newBufferedReader方法,通过几乎相同的代码,从文件中读取。

最后,我建议远离旧的IO和NIO选项,这些选项已被广泛替换;当你需要像#34; \"或" /" (取决于您的操作系统),只需使用System属性file.separator或静态字段File.separator;按字面拼接字符会破坏你在其他操作系统上的程序,并将完全扼杀使用Java的原始点。

对于一个广泛的问题,这是一个广泛的答案,但我希望我已经让你走上正轨。如果有任何混淆,请告诉我。

答案 1 :(得分:1)

我之前使用直接写入文本文件的方法是为了简单,但发现操作系统中的不一致可能会导致问题,正如Oberlin所说。一个非常流行的替代方案是使用嵌入式数据库(它比听起来更容易)。这是怎么回事。

假设您的游戏类看起来像这样:

public class Game {
   private String CharacterName;
   private int Health;
   private int TimePlayed;

   [Methods, etc.]
}

只需添加一些标签和ID,就可以将其变成所谓的实体

import java.io.Serializable;
import javax.persistence.*;

@Entity
public class Game implements Serializable{
   private static final long serialVersionUID = 1L;

   @Id @GeneratedValue
   private long id;

   private String CharacterName;
   private int Health;
   private int TimePlayed;

   [Methods, etc.]
}

实体的特殊之处在于它们允许您保存整个类本身,而不必选择变量并将其写入文本文件。这听起来像你想做的,对吧?点击保存按钮并在那一刻拍摄你的节目快照?

从这里开始,你只需要一个数据库来存储实体。我建议使用ObjectDB,因为它非常简单,快速,免费。此外,由于它是嵌入式数据库,因此所有内容都存储在您的计算机上。您不需要Internet连接或正在运行的服务器。只需按照以下步骤操作:

  1. here
  2. 下载ObjectDB文件
  3. 将包含的ObjectDB jar文件添加到类路径中。
  4. 在您的程序中添加代码以连接到数据库并保存/加载您的实体。
  5. 步骤2&在ObjectDB的简短教程here中解释了3。 Netbeans有一个,Eclipse有一个。

    完成所有操作后,ObjectDB会将您的实体存储在不大于文本文档的文件中。祝你好运!