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

摘要:
[原创]Alex游戏过程中,通常需要存储游戏状态。在下次启动游戏时,重新载入游戏,继续游戏。实现过程非常简单,首先建立一个结构体定义需要保存的游戏参数,然后通过XmlSerializer类将其保存为一个XML文档。1interfaceGameData2{3intGameID;4stringPlayName;5DateTimeTime;6}XNA游戏可运行在XBOX和PC,做到两者的兼容,需要使用StorageDevice将数据保存到磁盘。首先一步创建一个StorageDevice,这个过程需要打开Guide并终止程序,直到用户关闭Guide。使用Guide必须在Game类的构造函数中进行注册。代码1//获取键盘状态2KeyboardStatekeyState=Keyboard.GetState();3//Guide不显示4if(!

[原创]Alex

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

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

1interfaceGameData
2{
3intGameID;
4stringPlayName;
5DateTimeTime;
6}

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

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

1publicAlexGame()
2{
3graphics=newGraphicsDeviceManager(this);
4Content.RootDirectory="Content";
5Components.Add(newGamerServicesComponent(this));
6}

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

代码
1//获取键盘状态2KeyboardStatekeyState=Keyboard.GetState();
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方法

代码
1privatevoidFindStorageDevice(IAsyncResultresult)
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方法:

代码
1privatevoidSaveGame(StorageDevicestorageDevice)
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}
代码
privatevoidLoadGame(StorageDevicestorageDevice)
{
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

免责声明:文章转载自《XNA游戏开发之(六)——保存游戏数据》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Appium+Robotframework实现Android应用的自动化测试-3:一个必不可少的工具介绍SpringBoot之整合Redis下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

在游戏开发中运用测试

我对测试的重视是从接触《测试驱动开发的艺术》这本书开始的,那时我还在做web网站开发。尽管项目没有对测试做要求,但我还是为自己编写的service和servlet加上了单元测试,从那以后我一直受益于测试。 测试的好处有很多,这里我总结下我在游戏开发中使用测试所感受到的最实在的好处。 1、协同开发时,便于确认到底是谁的错,自己的,还是别人的。 我是负责开发游...

《JavaScript 高级程序设计》总结

一、JS基本概念 1、命名规则 变量名区分大小写(test和Test是两个不同的变量名),标识符采用驼峰命名格式,即:第一个字母小写,剩下的每个有意义的单词首字母大写; 标识符第一个字符必须是以字母、_ 、$开始; 标识符及变量名不能与关键字保留字一样; 其他字符可以是数字、字母、下划线、或$。 2、注释 //单行注释 /**/多行注释 3、...

C#中的typeof()和GetType()的区别

说明:这里只列举了一部分,还有待继续添加: 1、typeof(x)中的x,必须是具体的类名、类型名称等,不可以是变量名称。 2、GetType()方法继承于Object(C#中所有类的基类都是object类。基类是相对于派生类而言的,比方说:如果B类继承自A类,则A就是B的基类。), 所以C#中任何对象都具有GetType()方法,它的作用和typeof(...

C#(4):XML序列化

一、使用 System.Xml.Serialization类 1、定义元数据 引入System.Xml.Serialization命名空间。 XML序列化常用属性: XmlRoot XmlType XmlText XmlEnum [Serializable] [XmlRoot] public class Product { public int...

MSIL实用指南-生成异常处理

本篇讲解怎么生成异常。C# 异常处理时建立在四个关键词之上的:try、catch、finally 和 throw。 一、异常的抛出抛出异常在C#语言中要使用throw关键字,使用方法是throw <一个异常对象>;和throw; 1、抛出异常抛出异常的指令是Throw,它对应的C#使用语句是throw new <异常类型>; 它的使...

【转】推荐给大家的7本游戏开发书

1、游戏设计的 100 个原理 世界知名的游戏设计界权威的见解和阐释,深刻揭示原理对游戏设计的启发和价值。 本书首次将游戏设计师的想法中最好的一部分变成一个工具包。作者在书中整合了众多游戏设计秘笈,概括并阐释了 100 条重要的方法、原理和设计哲学。这些原理是从游戏设计的各个流派中收集而来的,并且从创新、创作、平衡和解决问题这 4 个角度来组织并加以...