XNA:将对象序列化到独立存储

我有一个课程来定义我的水平。 我的内容项目中有一个XML文件,用于存储关卡的详细信息。

我可以使用LoadContent()从Content Project加载XML文件的详细信息。 这将创建一个包含XML文件中所有细节的对象。

现在,我想将该游戏级别保存到独立存储中。

我见过的所有例子都表明我需要使用XMLWriter和XMLSerializer。 这是为什么? 我不能使用XNA框架用于从内容管道加载的机制吗?


您不需要XMLWriter或XMLSerializer,但您确实需要序列化程序。 以下是我的Generic IsolatedStorage Utilty的示例

public static void Save<T>(string fileName, T item)
{
    using (IsolatedStorageFile storage = IsolatedStorageFile.GetUserStoreForApplication())
    {
        using (IsolatedStorageFileStream fileStream = new IsolatedStorageFileStream(fileName, FileMode.Create, storage))
        {
            DataContractSerializer serializer = new DataContractSerializer(typeof(T));
            serializer.WriteObject(fileStream, item);
        }
    }
}

public static T Load<T>(string fileName)
{
    using (IsolatedStorageFile storage = IsolatedStorageFile.GetUserStoreForApplication())
    {
        using (IsolatedStorageFileStream fileStream = new IsolatedStorageFileStream(fileName, FileMode.Open, storage))
        {
            DataContractSerializer serializer = new DataContractSerializer(typeof(T));
            return (T)serializer.ReadObject(fileStream);
        }
    }
}

将XML引用为XNA内容时,它将通过ContentPipeline进行编译。 所以当你加载内容时,你通过ContentManager来完成它。 此XML文件引用应该在ContentPipeline中,因为它不能被修改。 您应该保留通过ContentPipline引用的静态文件,并保留所有保存在IsolatedStorage中的动态文件。 一旦文件被注释,它们不能被改变,这就是为什么它不能被保存到ContentPipeline。

链接地址: http://www.djcxy.com/p/95515.html

上一篇: XNA: serializing object to isolated storage

下一篇: Building a 2D XNA Game Engine