XNA游戏开发之(六)——保存游戏数据
[原创]Alex
游戏过程中,通常需要存储游戏状态。在下次启动游戏时,重新载入游戏,继续游戏。
实现过程非常简单,首先建立一个结构体定义需要保存的游戏参数,然后通过XmlSerializer类将其保存为一个XML文档。
2 {
3 int GameID;
4 string PlayName;
5 DateTime Time;
6 }
XNA游戏可运行在XBOX和PC,做到两者的兼容,需要使用StorageDevice将数据保存到磁盘。
首先 一步创建一个StorageDevice,这个过程需要打开Guide并终止程序,直到用户关闭Guide。使用Guide必须在Game类的构造函数中进行注册。
2 {
3 graphics = new GraphicsDeviceManager(this);
4 Content.RootDirectory = "Content";
5 Components.Add(new GamerServicesComponent(this));
6 }
第二步 在Update方法中捕获事件。
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方法
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方法:
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 }
{
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
转载于:https://www.cnblogs.com/AlexCheng/archive/2010/05/04/2120349.html
XNA游戏开发之(六)——保存游戏数据相关推荐
- java游戏开发入门(六) - 变量 UI
java游戏开发入门(六) - 变量 & UI 前言 编码 首先我们创建一个变量 修改碰撞逻辑 初始化UI并将UI与变量绑定绑定 于是我们就得到了这样一个效果 完整代码 完整项目 前言 上 ...
- 【游戏开发】《Java游戏服务器架构实战》项目在windows上部署
[游戏开发]<Java游戏服务器架构实战>项目在windows上部署 文章目录 [游戏开发]<Java游戏服务器架构实战>项目在windows上部署 一.配置项目基础环境 二. ...
- Unity 2D游戏开发教程之为游戏场景添加多个地面
Unity 2D游戏开发教程之为游戏场景添加多个地面 为游戏场景添加多个地面 显然,只有一个地面的游戏场景太小了,根本不够精灵四处活动的.那么,本节就来介绍一种简单的方法,可以为游戏场景添加多个地面. ...
- Unity 2D游戏开发教程之2D游戏的运行效果
Unity 2D游戏开发教程之2D游戏的运行效果 2D游戏的运行效果 本章前前后后使用了很多节的篇幅,到底实现了怎样的一个游戏运行效果呢?或者说,游戏中的精灵会不会如我们所想的那样运行呢?关于这些疑 ...
- Unity 2D游戏开发教程之2D游戏的运行效果
Unity 2D游戏开发教程之2D游戏的运行效果 2D游戏的运行效果 本章前前后后使用了很多节的篇幅,到底实现了怎样的一个游戏运行效果呢?或者说,游戏中的精灵会不会如我们所想的那样运行呢?关于这些疑问 ...
- 【Visual C++】游戏开发笔记二十 游戏基础物理建模(二) 重力系统的模拟
本系列文章由zhmxy555(毛星云)编写,转载请注明出处. http://blog.csdn.net/zhmxy555/article/details/7496200 作者:毛星云 邮箱: h ...
- 【Visual C++】游戏开发笔记十五 游戏人工智能(一) 运动型游戏AI
分享一下我老师大神的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow 本系列文章由zhm ...
- 【转】【Visual C++】游戏开发笔记十五 游戏人工智能(一) 运动型游戏AI
原文连接:http://www.cnblogs.com/dyllove98/archive/2012/04/07/2461865.html#commentform 我们常常听闻AI(Artificia ...
- 【Visual C++】游戏开发笔记十五 游戏人工智能(一) 运动型游戏AI .
本系列文章由zhmxy555编写,转载请注明出处. http://blog.csdn.net/zhmxy555/article/details/7434317 作者:毛星云 邮箱: happy ...
最新文章
- 钉钉头像大小设置 阿里cdn尺寸截取参数设置
- FSD HOOK与SSDT HOOK恢复简单思路
- python3菜鸟教程-Python3 元组
- 2022年跨境电商的风口还在吗?
- java ee api_Java EE并发API教程
- Camparable与Comparator之区别
- 掌握 Kafka,看这篇就足够了
- 46 -算法 - Leetcode -169 - 多数元素 - map insert 迭代器
- python中delete怎么用_python删除np.deletePython基础教程05 - 缩进和选择
- R语言︱数据集分组、筛选(plit – apply – combine模式、dplyr、data.table)
- yacc c语言语法分析,编译原理实践--语法分析程序的自动生成工具YACC.PPT
- gg修改器偏移量修改_GG修改器偏移是怎么弄 | 手游网游页游攻略大全
- Jrebel激活服务,Jrebel激活,Jrebel激活码,Jrebel破解
- windows cmd命令结束进程(window使用kill命令)
- python实现isprime_isPrime函数(列表+%运算符)
- 人脸特征点定位方法DEST, 基于VS2019+OpenCV3.4.6
- 福利!网络工程师H3CNE认证GB0-191 考试试题库超详细解读-01。持续更新~
- 掌阅 兼容性测试 结果
- Android 安卓修改程序图标
- symbian v3模拟器开启后自动关闭