[原创]Alex
游戏过程中,通常需要存储游戏状态。在下次启动游戏时,重新载入游戏,继续游戏。
实现过程非常简单,首先建立一个结构体定义需要保存的游戏参数,然后通过XmlSerializer类将其保存为一个XML文档。
2{
3intGameID;
4stringPlayName;
5DateTimeTime;
6}
XNA游戏可运行在XBOX和PC,做到两者的兼容,需要使用StorageDevice将数据保存到磁盘。
首先 一步创建一个StorageDevice,这个过程需要打开Guide并终止程序,直到用户关闭Guide。使用Guide必须在Game类的构造函数中进行注册。
2{
3graphics=newGraphicsDeviceManager(this);
4Content.RootDirectory="Content";
5Components.Add(newGamerServicesComponent(this));
6}
第二步 在Update方法中捕获事件。
3//Guide不显示4if(!Guide.IsVisible)
5{
6//键盘按下S7if(keyState.IsKeyDown(Keys.S))
8Guide.BeginShowStorageDeviceSelector(FindStorageDevice,"saveRequest");
9//键盘按下L10if(keyState.IsKeyDown(Keys.L))
11Guide.BeginShowStorageDeviceSelector(FindStorageDevice,"loadRequest");
12}
第三步,定义FindStorageDevice方法
2{
3StorageDevicestorageDevice=Guide.EndShowStorageDeviceSelector(result);
4if(storageDevice!=null)
5{
6if(result.AsyncState.ToString()=="saveRequest")
7{
8//保存游戏9SaveGame(storageDevice);
10}
11elseif(result.AsyncState.ToString()=="loadRequest")
12{
13//加载游戏14LoadGame(storageDevice);
15}
16}
17}
第四步,定义SaveGame,LoadGame方法:
2{
3StorageContainercontainer=storageDevice.OpenContainer("AlexGame");
4stringfileName=Path.Combine(container.Path,"save0001.sav");
5FileStreamsaveFile=File.Open(fileName,FileMode.Create);
6XmlSerializerxmlSerializer=newXmlSerializer(typeof(GameData));
7XmlSerializer.Serialize(saveFile,gameData);
8saveFile.Close();
9}
{
StorageContainercontainer=storageDevice.OpenContainer("AlexGame");
stringfileName=Path.Combine(container.Path,"save0001.sav");
if(File.Exists(fileName))
{
FileStreamsaveFile=File.Open(fileName,FileMode.Open);
XmlSerializerxmlSerializer=newXmlSerializer(typeof(GameData));
gameData=(GameData)xmlSerializer.Deserialize(saveFile);
saveFile.Close();
}
}
运行游戏后按下键盘S键会在“文档”建立相应的游戏保存文件夹 如AlexGame