XNA游戏开发之(六)——保存游戏数据

[原创]Alex

游戏过程中,通常需要存储游戏状态。在下次启动游戏时,重新载入游戏,继续游戏。

实现过程非常简单,首先建立一个结构体定义需要保存的游戏参数,然后通过XmlSerializer类将其保存为一个XML文档。

1 interface GameData
2 {
3 int GameID;
4 string PlayName;
5    DateTime Time;
6 }

XNA游戏可运行在XBOX和PC,做到两者的兼容,需要使用StorageDevice将数据保存到磁盘。

首先 一步创建一个StorageDevice,这个过程需要打开Guide并终止程序,直到用户关闭Guide。使用Guide必须在Game类的构造函数中进行注册。

1 public AlexGame()
2 {
3     graphics = new GraphicsDeviceManager(this); 
4     Content.RootDirectory = "Content"; 
5     Components.Add(new GamerServicesComponent(this)); 
6 }

第二步 在Update方法中捕获事件。

代码

1 //获取键盘状态
2 KeyboardState keyState = Keyboard.GetState(); 
3 //Guide不显示
4 if (!Guide.IsVisible)
5 {
6 //键盘按下S
7 if (keyState.IsKeyDown(Keys.S)) 
8         Guide.BeginShowStorageDeviceSelector(FindStorageDevice, "saveRequest"); 
9 //键盘按下L
10 if (keyState.IsKeyDown(Keys.L)) 
11         Guide.BeginShowStorageDeviceSelector(FindStorageDevice, "loadRequest"); 
12 }

第三步,定义FindStorageDevice方法

代码

1 private void FindStorageDevice(IAsyncResult result)
2 {
3     StorageDevice storageDevice = Guide.EndShowStorageDeviceSelector(result); 
4 if (storageDevice != null)
5     {
6 if (result.AsyncState.ToString() == "saveRequest")
7         {
8 //保存游戏 
9             SaveGame(storageDevice);
10         } 
11 else if (result.AsyncState.ToString() == "loadRequest")
12         {
13 //加载游戏
14             LoadGame(storageDevice); 
15         }    
16     }
17 }

第四步,定义SaveGame,LoadGame方法:

代码

1 private void SaveGame(StorageDevice storageDevice) 
2 {
3     StorageContainer container = storageDevice.OpenContainer("AlexGame"); 
4 string fileName = Path.Combine(container.Path, "save0001.sav"); 
5     FileStream saveFile = File.Open(fileName, FileMode.Create); 
6     XmlSerializer xmlSerializer = new XmlSerializer(typeof(GameData)); 
7     XmlSerializer.Serialize(saveFile, gameData); 
8     saveFile.Close(); 
9 }

代码

private void LoadGame(StorageDevice storageDevice) 
{
    StorageContainer container = storageDevice.OpenContainer("AlexGame"); 
string fileName = Path.Combine(container.Path, "save0001.sav"); 
if (File.Exists(fileName)) 
    {
        FileStream saveFile = File.Open(fileName, FileMode.Open); 
        XmlSerializer xmlSerializer = new XmlSerializer(typeof(GameData)); 
        gameData = (GameData)xmlSerializer.Deserialize(saveFile); 
        saveFile.Close(); 
    }
}

运行游戏后按下键盘S键会在“文档”建立相应的游戏保存文件夹 如AlexGame

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值