我有一个定义我的关卡的课程。我的Content Project中有一个XML文件,用于存储关卡的详细信息。
我可以使用LoadContent()从Content Project加载XML文件的详细信息。这将创建一个包含XML文件中所有详细信息的对象。
现在,我想将该游戏级别保存到独立存储中。
我见过的所有示例都表明我需要使用XMLWriter和XMLSerializer。这是为什么?我是否可以不使用XNA框架从内容管道加载的机制?
答案 0 :(得分:4)
您不需要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文件应 NOT 在ContentPipeline中,因为它无法修改。您应该保留通过ContentPipline引用的静态文件,并将所有动态文件保存在IsolatedStorage中。一旦文件被编译,它们就无法更改,这就是为什么它不能保存到ContentPipeline。