为什么这样设计游戏存档功能BUG比较少?

点击上方亿元程序员+关注和★星标

引言

大家好,我是亿元程序员,一位有着8年游戏行业经验的主程。

本系列是《和8年游戏主程一起学习设计模式》,让糟糕的代码在潜移默化中升华,欢迎大家关注分享收藏订阅。

游戏中的存档功能我们可以利用设计模式中的备忘录模式完成,BUG还比较少

在游戏开发过程中,我们经常会遇到需要保存和恢复对象状态 的场景。为了解决这个问题,我们可以使用备忘录模式 。那么,什么是 备忘录模式?它有哪些优点 ?又该如何在游戏开发中使用呢?本文将为您详细介绍。

本文源码和源工程在文末获取,小伙伴们自行前往。

什么是备忘录模式?

备忘录模式(Memento Pattern)是一种行为型设计模式 ,它通过创建一个备忘录来存储对象的内部状态 ,以便在需要时恢复 对象的状态。这种模式主要用于避免对象状态的频繁变化,从而提高性能。

它主要包含三个角色:发起人 (Originator)、备忘录 (Memento)和负责人(Caretaker)。

备忘录模式的优点

  1. 简化了对象的状态管理:备忘录模式将复杂的状态管理过程封装在备忘录类中,使得客户端代码更加简洁。

  2. 提高了代码的可读性和可维护性:通过使用备忘录模式,我们可以将对象的状态恢复逻辑与业务逻辑分离,使得代码更加清晰易懂。

  3. 降低了系统的耦合度:备忘录模式使得对象的状态恢复过程与客户端代码解耦,降低了系统之间的依赖关系。

如何在游戏开发中使用备忘录模式设计存档功能?

在游戏开发中,我们经常需要保存和恢复游戏关卡、角色状态等对象的状态。以下是一个简单的示例,展示了如何在游戏开发中使用备忘录模式。

1.备忘录类

首先 定义一个备忘录类,用于存储 发起人的内部状态。备忘录通常包含 一个或多个属性,用于表示 发起人的状态。同时,备忘录可以防止 发起人以外的其他对象访问 其内部状态。这里我们存储兔子的坐标

2.发起人类

然后 定义一个发起人类,用于记录 当前时刻的内部状态,并负责定义 哪些属于备份范围的状态。此外,发起人还需要负责创建 备忘录以及使用 备忘录恢复状态。这里我们负责创建兔子坐标的备忘录信息恢复兔子的坐标信息

3.负责人类

最后 定义一个负责人类,负责保存 备忘录,但并不对 备忘录的内容进行操作或检查 。负责人提供 保存与获取备忘录的功能,使得在需要的时候可以恢复 发起人的某一历史状态 。这里负责保存和恢复兔子坐标的备忘录信息。

4.测试代码

今天我们的主角是一只兔子 ,按照惯例加载兔子并且播放动画 ,然后我们创建一个发起人Originator以及负责人Caretaker

然后添加交互事件 :包括兔子的拖拽效果 ,改变兔子的位置,以及键盘事件 s保存和r恢复。

5.结果演示

首先我们通过鼠标拖拽兔子到不同的位置 ,同时通过键盘s记录每个位置的坐标信息

然后通过键盘r将兔子恢复到前面逐个记录的位置

通过以上示例 ,我们可以看到,在游戏开发中使用备忘录模式可以有效地简化对象状态的管理,提高代码的可读性和可维护性 。同时,备忘录模式还可以降低系统之间的耦合度 ,使得代码更加灵活和易于扩展

结语

在哪里 可以看到如此清晰的思路,快跟上我的节奏!关注我 ,和我一起了解 游戏行业最新动态,学习游戏开发技巧。

本系列是《和8年游戏主程一起学习设计模式》,让糟糕的代码在潜移默化中升华,欢迎大家关注分享收藏订阅。

我是"亿元程序员",一位有着8年游戏行业经验的主程。在游戏开发中,希望能给到您帮助, 也希望通过您能帮助到大家。

AD:笔者线上的小游戏《贪吃蛇掌机经典》《重力迷宫球》《填色之旅》大家可以自行点击搜索体验。

实不相瞒,想要个在看 !请把该文章分享给你觉得有需要的其他小伙伴。谢谢!

推荐专栏:

8年主程手把手打造Cocos独立游戏开发框架

从零开始开发贪吃蛇小游戏到上线系列

游戏开发的技巧、心得、资讯

关注我,发送"备忘录模式"获取源码和源工程。

点击下方绿色按钮+关注

相关推荐
我要洋人死26 分钟前
导航栏及下拉菜单的实现
前端·css·css3
科技探秘人37 分钟前
Chrome与火狐哪个浏览器的隐私追踪功能更好
前端·chrome
科技探秘人38 分钟前
Chrome与傲游浏览器性能与功能的深度对比
前端·chrome
JerryXZR43 分钟前
前端开发中ES6的技术细节二
前端·javascript·es6
七星静香1 小时前
laravel chunkById 分块查询 使用时的问题
java·前端·laravel
q2498596931 小时前
前端预览word、excel、ppt
前端·word·excel
小华同学ai1 小时前
wflow-web:开源啦 ,高仿钉钉、飞书、企业微信的审批流程设计器,轻松打造属于你的工作流设计器
前端·钉钉·飞书
Gavin_9151 小时前
【JavaScript】模块化开发
前端·javascript·vue.js
懒大王爱吃狼2 小时前
Python教程:python枚举类定义和使用
开发语言·前端·javascript·python·python基础·python编程·python书籍
逐·風6 小时前
unity关于自定义渲染、内存管理、性能调优、复杂物理模拟、并行计算以及插件开发
前端·unity·c#