为什么这样设计游戏存档功能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独立游戏开发框架

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

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

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

点击下方绿色按钮+关注

相关推荐
编程猪猪侠2 分钟前
Tailwind CSS 自定义工具类与主题配置指南
前端·css
qhd吴飞6 分钟前
mybatis 差异更新法
java·前端·mybatis
YGY Webgis糕手之路28 分钟前
OpenLayers 快速入门(九)Extent 介绍
前端·经验分享·笔记·vue·web
患得患失94930 分钟前
【前端】【vueDevTools】使用 vueDevTools 插件并修改默认打开编辑器
前端·编辑器
ReturnTrue86831 分钟前
Vue路由状态持久化方案,优雅实现记住表单历史搜索记录!
前端·vue.js
UncleKyrie37 分钟前
一个浏览器插件帮你查看Figma设计稿代码图片和转码
前端
遂心_39 分钟前
深入解析前后端分离中的 /api 设计:从路由到代理的完整指南
前端·javascript·api
你听得到111 小时前
Flutter - 手搓一个日历组件,集成单日选择、日期范围选择、国际化、农历和节气显示
前端·flutter·架构
风清云淡_A1 小时前
【REACT18.x】CRA+TS+ANTD5.X封装自定义的hooks复用业务功能
前端·react.js
@大迁世界1 小时前
第7章 React性能优化核心
前端·javascript·react.js·性能优化·前端框架