第四十三节 读档

有了存档之后,我们就可以读取上一次游戏记录了。

01.添加读档方法

首先需要在导演类添加一个成员变量来存储读档的数据:

Archive _archive;           // 存档数据

然后添加方法:

// 读档 - 将硬盘数据读取至档案
void ReadArchive()
{
    // 判断是否有存档文件
    if (!File.Exists("GameSave.bin")) return;

    IFormatter formatter = new BinaryFormatter();
    Stream stream = new FileStream("GameSave.bin", FileMode.OpenOrCreate, File-Access.Read, FileShare.Read);
    _archive = (Archive)formatter.Deserialize(stream);
    stream.Close();
}
02.何时读档

在游戏开始之前,在Start()方法中:

void Start()
{
    ReadArchive();
    bool initSuccess = InitGame();

    // 启动定时器,执行游戏核心逻辑
    if (initSuccess) InvokeRepeating("GameCore", 0, 1 - (_level - 1) * 0.1f);
}
03.恢复上一次游戏

目前只是把上一次的存档写入了档案,还需要把这些数据赋给成员变量才行。通过修改InitGame()来实现:

// 在这里恢复上一次游戏
if (_archive != null)
{
    // 恢复固定图层数据
    _defaultLayer.ViewData = _archive.fixedPoints;
            
    // 恢复方块
    _blockLayer.Point = _archive.blockLayerPoint;
    _currentBlockType = (EBlockType)_archive.blockType;
    _blockLayer.ViewData = BlockCreator.GetInstance().CreateBlock(_currentBlockType);

    _nextBlockType = (EBlockType)_archive.nextBlockType;
    _screenAttachedScript.GetLayer("DefaultLayer").ViewData = BlockCrea-tor.GetInstance().CreateBlock(_nextBlockType);

    // 恢复分数
    _currentScore = _archive.score;
    _highScore = _archive.highScore;
    _currentScoreScript.SetScore(_currentScore);
    _highScoreScript.SetScore(_highScore);

    // 暂停游戏
    _paused = true;
    InvokeRepeating("BlinkPauseHint", 0, 0.2f);
}

之所以在恢复游戏后暂停,是为了让你在游戏开始前做好充分准备,如果不这么做,在游戏等级高的时候,就容易手忙脚乱。

04.测试及注意点

这是正确情况下读取的存档结果:



注意,请不要消除方块时关闭游戏,目前还没有对消除进程做存档,所以如果在消除时关闭了游戏,那么下次打开后,游戏就会出错,如下所示:



要知道,分数的最后一位不可能不是0。
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,136评论 1 32
  • ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 O...
    我想起个好名字阅读 5,429评论 0 9
  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 5,808评论 0 10
  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 4,438评论 0 5
  • 某人的先生带着孩子公婆出去旅游了,剩下她一个人在家,就是那么刚刚好,家里停电,常去的美发沙龙又预约到了24点,所以...
    含羞的红颜阅读 471评论 0 1