[原创]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

转载于:https://www.cnblogs.com/AlexCheng/archive/2010/05/04/2120349.html

XNA游戏开发之(六)——保存游戏数据相关推荐

  1. java游戏开发入门(六) - 变量 UI

    java游戏开发入门(六) - 变量 & UI 前言 编码 首先我们创建一个变量 修改碰撞逻辑 初始化UI并将UI与变量绑定绑定 于是我们就得到了这样一个效果 完整代码 完整项目 前言   上 ...

  2. 【游戏开发】《Java游戏服务器架构实战》项目在windows上部署

    [游戏开发]<Java游戏服务器架构实战>项目在windows上部署 文章目录 [游戏开发]<Java游戏服务器架构实战>项目在windows上部署 一.配置项目基础环境 二. ...

  3. Unity 2D游戏开发教程之为游戏场景添加多个地面

    Unity 2D游戏开发教程之为游戏场景添加多个地面 为游戏场景添加多个地面 显然,只有一个地面的游戏场景太小了,根本不够精灵四处活动的.那么,本节就来介绍一种简单的方法,可以为游戏场景添加多个地面. ...

  4. ​Unity 2D游戏开发教程之2D游戏的运行效果

    ​Unity 2D游戏开发教程之2D游戏的运行效果 2D游戏的运行效果 本章前前后后使用了很多节的篇幅,到底实现了怎样的一个游戏运行效果呢?或者说,游戏中的精灵会不会如我们所想的那样运行呢?关于这些疑 ...

  5. Unity 2D游戏开发教程之2D游戏的运行效果

    Unity 2D游戏开发教程之2D游戏的运行效果 2D游戏的运行效果 本章前前后后使用了很多节的篇幅,到底实现了怎样的一个游戏运行效果呢?或者说,游戏中的精灵会不会如我们所想的那样运行呢?关于这些疑问 ...

  6. 【Visual C++】游戏开发笔记二十 游戏基础物理建模(二) 重力系统的模拟

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处. http://blog.csdn.net/zhmxy555/article/details/7496200 作者:毛星云    邮箱: h ...

  7. 【Visual C++】游戏开发笔记十五 游戏人工智能(一) 运动型游戏AI

    分享一下我老师大神的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow 本系列文章由zhm ...

  8. 【转】【Visual C++】游戏开发笔记十五 游戏人工智能(一) 运动型游戏AI

    原文连接:http://www.cnblogs.com/dyllove98/archive/2012/04/07/2461865.html#commentform 我们常常听闻AI(Artificia ...

  9. 【Visual C++】游戏开发笔记十五 游戏人工智能(一) 运动型游戏AI .

    本系列文章由zhmxy555编写,转载请注明出处.  http://blog.csdn.net/zhmxy555/article/details/7434317 作者:毛星云    邮箱: happy ...

最新文章

  1. 钉钉头像大小设置 阿里cdn尺寸截取参数设置
  2. FSD HOOK与SSDT HOOK恢复简单思路
  3. python3菜鸟教程-Python3 元组
  4. 2022年跨境电商的风口还在吗?
  5. java ee api_Java EE并发API教程
  6. Camparable与Comparator之区别
  7. 掌握 Kafka,看这篇就足够了
  8. 46 -算法 - Leetcode -169 - 多数元素 - map insert 迭代器
  9. python中delete怎么用_python删除np.deletePython基础教程05 - 缩进和选择
  10. R语言︱数据集分组、筛选(plit – apply – combine模式、dplyr、data.table)
  11. yacc c语言语法分析,编译原理实践--语法分析程序的自动生成工具YACC.PPT
  12. gg修改器偏移量修改_GG修改器偏移是怎么弄 | 手游网游页游攻略大全
  13. Jrebel激活服务,Jrebel激活,Jrebel激活码,Jrebel破解
  14. windows cmd命令结束进程(window使用kill命令)
  15. python实现isprime_isPrime函数(列表+%运算符)
  16. 人脸特征点定位方法DEST, 基于VS2019+OpenCV3.4.6
  17. 福利!网络工程师H3CNE认证GB0-191 考试试题库超详细解读-01。持续更新~
  18. 掌阅 兼容性测试 结果
  19. Android 安卓修改程序图标
  20. symbian v3模拟器开启后自动关闭

热门文章

  1. golang中的空slice
  2. linux命令lsof
  3. 嵌入式中常见的几个死循环:
  4. 常考数据结构与算法:两个链表生成相加链表
  5. [译]Effective Kotlin系列之探索高阶函数中inline修饰符(三)
  6. qdbus 复杂类型
  7. python Gevent – 高性能的Python并发框架
  8. 每天多一点(2016.12.04)》Javascript隐式转换
  9. Hadoop学习笔记—20.网站日志分析项目案例(一)项目介绍
  10. 深js, jsconf China 回顾