1

我在保存到二进制文件时遇到了一些问题。

我需要将我的游戏信息保存到一个二进制文件并在游戏加载时加载它。我试图用将保存的所有信息创建一个类,然后保存它。

它看起来像这样:

public struct SaveGameData
{
    public List<Chunk> chunkList;
    public string saveName;
    public string playerName;
    public Vector2 playerPosition;
}

问题是块列表...它不序列化并且类不能序列化,因为它包含对 XNA 类的引用。

我保存数据的函数如下所示:

public static void saveGame(string mSaveFileName, SaveGameData data)
    {
        saveFileName = mSaveFileName;

        if (!Directory.Exists(saveFilePath))
        {
            Directory.CreateDirectory(saveFilePath);
        }

        FileStream stream = File.Open(saveFilePath + saveFileName + ".dat", FileMode.OpenOrCreate, FileAccess.Write);

        data.saveName = saveFileName;
        formatter.Serialize(stream, data);
        stream.Close();
    }

如何将类的实例保存到文件中,然后再读取?

4

1 回答 1

0

保存数据时没有问题。

XNA 您可以轻松地将用户数据或游戏详细信息保存在文件中。但是序列化的东西可能会出现问题。这是我使用的不同选项。你可以选择其中任何一个。

另存为 XML:如果您的类是可序列化的(具有序列化属性的类),您可以将类序列化为 XML 并将其写入磁盘。使用纯 C# 有很多方法可以做到这一点。这是它的MSDN。您可以选择其中任何一个

另存为 JSON:如果您的类是可序列化的,那么您可以使用文件流在磁盘上另存为 JSON,因为 JSON 是纯字符串,您可以将数据写入流。

另存为文本:我个人从不喜欢这个,因为这个文件没有任何结构,读回很困难

另存为二进制:正如您在此处尝试的那样。将数据转换为添加为二进制对象。最大的缺点是即使您可以读取数据。它比 about 选项快,但在游戏中你真正需要进行 IO 操作的时刻非常少。所以,我个人更喜欢上述选项。

如果需要更多详细信息,请告诉我。

于 2013-08-09T08:41:18.793 回答