游戏开发实战教程(11):使用本地缓存

简介: 本地缓存就是将数据存储在玩家的手机上,例如玩家的得分或者关卡存档,这样当下次打开游戏时,就可以通过读取已经的存储在本地的数据,对游戏中的内容进行设置。设置缓存 KEY 的值为 VALUE : 将某个值 value 存储在本地,并且为它设置一把钥匙 key,通过这个钥匙 key,就能够找到这个存储在本地的值 value。钥匙和值是一一对应的关系,就是说每把钥匙对应一个唯一的值。因此,当你需要存储多个值时,就需要对应的设置多把钥匙才行。

本地缓存就是将数据存储在玩家的手机上,例如玩家的得分或者关卡存档,这样当下次打开游戏时,就可以通过读取已经的存储在本地的数据,对游戏中的内容进行设置。



下面,就就让我们来看一下,如何实现这个缓存设置的功能。


首先,需要添加“本地缓存”的插件。点击功能区的“添加插件”按钮。


在弹出的“管理插件”对话框中,打开“本地缓存”插件。


打开后,回到积木区的“插件”中,就能够看到与本地缓存有关的积木了。


简单解释一下这些积木块的意思。


  • 设置缓存 KEY 的值为 VALUE : 将某个值 value 存储在本地,并且为它设置一把钥匙 key,通过这个钥匙 key,就能够找到这个存储在本地的值 value。钥匙和值是一一对应的关系,就是说每把钥匙对应一个唯一的值。因此,当你需要存储多个值时,就需要对应的设置多把钥匙才行。

  • 删除缓存 KEY 的值:删除掉本地存储的钥匙 key ,以及其对应的值 value。

  • 清空全部存储值:删除掉本地存储的所有的钥匙 key ,以及对应的值 value。

  • 获取缓存 KEY 的值:通过唯一的钥匙 key ,拿到那个与它对应的值。

  • 缓存 KEY 是否存在:判断是否存在钥匙 key,如果钥匙不存在的话,也就意味着也不存在本地存储的值了。


接着我们直接看一下控制声音设置的积木块。

我们设置了一把叫做“声音”的钥匙 key,然后为其设置了一个用于判断声音是否开关的值 value,这个值只有两个状态,0 表示声音关,1 表示声音开。


在游戏启动后,首先去判断“声音”的钥匙 key 是否存在,存在的话,就读取一下这个本地的值,将它设置到全局变量“全局-声音”中,然后根据这个全局变量来设置声音按钮上显示的文字。


当声音设置的按钮被点击时,通过全局变量“全局-声音”来判断当前的声音是开还是关,如果开着的话,就将其关闭,反之,就将其打开。最后再将设置后的全局变量“全局-声音”的值存储到本地。


这样就实现了一个声音按钮控制,并且会将玩家的设置保存到本地,这样下次打开游戏后,就会还原到先前的设置了。


除了缓存像 0,1,2 这样的整数,也可以缓存文字,例如“我是一段要缓存的文字”,另外,也可以将数据中的列表,表格,对象进行缓存,下面,就讲一下其它数据的缓存和读取的方法。


## 表格的缓存和读取


假设我们要缓存一个 5x5 的表格。


如图,我们创建了两个 5x5 的表格数据,一个是“要缓存的表格”,放置将要缓存的数据,另一个是“游戏中的表格”,在游戏中使用,每次游戏开始时,会将本地缓存的表格数据读取到“游戏中的表格”中。


这是要缓存的表格,第一行数据为 1 。


这是游戏中的表格,所有数据都为 0 。


下面,就实现一下这样的例子,先将“要缓存的表格”中的数据存到本地,然后,再通过读取本地的数据来设置“游戏中的表格”。


在游戏中放置两个按钮,点击“存储”时,会将“要缓存的表格”的数据存储到本地。点击“读取”时,会读取本地存储的数据到“游戏中的表格”中。


首先,看一下“存储”按钮上的逻辑。

很简单,点击后直接使用缓存积木块缓存整个表格的数据即可,这里我们将钥匙 KEY 命名为了“表格”。


再来看一下“读取”按钮上的逻辑。

点击后,直接使用赋值积木块,将缓存表格中的值设置到“游戏中的表格”中。


下面,我们点击调试一下看看,“游戏中的表格”是否能够成功设置。


游戏运行后,先点击“存储”,将“要缓存的表格”数据存储在本地,然后再接着点击“读取”,读取数据到“游戏中的表格”。

上图中你会发现,“游戏中的表格”并没有被设置(第一行不是 1),但是下方莫名其妙的出现了一个 undefined 变量,在这个变量中存储了我们本来要设置到“游戏中的表格”中的数据。


这可能是开发工具的问题,但是这证明我们无法直接将读取到的本地表格的数据直接设置到“游戏中的表格”中。


那么,如何解决这个问题呢?我们可以通过创建一个临时变量,先将读取到的本地表格数据存储在临时变量中,然后再通过循环逐个的将临时变量表格中的数据设置到“游戏中的表格”中。


先创建几个变量。

如图,新建了三个变量,“临时变量”用于存储读取到的本地表格数据,“行号”和“列号”用于双重循环。


接着,再来看一下我们修改后的读取逻辑。


再次调试一下,点击“读取”。

这次“游戏中的表格”被正常设置了,“全局-临时变量”中也存储了我们读取的数据,整个过程是这样的,我们先将读取到的本地表格数据存储到“全局-临时变量”中,然后再通过循环,逐个的将“全局-临时变量”中的数据设置到“游戏中的表格”中。


这就是存储和读取表格数据的方案了,看起来有点儿绕,至少在官方出来更好用的方案之前,大家可以先使用这个去满足当前的需求。


##列表的缓存和读取


读取列表跟读取表格是一样的道理,也是先将读取到的内容存储到一个“临时变量”中,然后再通过循环将列表中的每个数据设置到“游戏中的列表”中。


列表的存储。


列表的读取。


## 对象的缓存和读取


对象的缓存和读取也一样,不同的是对象无法使用循环进行遍历,只能去手动的设置每一个 key 的 value。


对象的存储。


对象的读取。


这一节的内容就到这里了,总结一下,首先我们讲了如何利用本地缓存来实现游戏中的声音设置的存储,接着讲了各种数据类型的本地缓存和读取操作。也许在未来,微信小游戏制作工具的官方会优化数据读取的操作,让其像数据存储操作一样的容易,只需要用一个积木块进行赋值即可。但是,在这之前,我们可以先使用这种稍微绕弯一点儿的方式来满足当前的需求。













欢迎加个微信,交个朋友,朋友圈每日分享与做游戏有关的知识和内容,可以来围观。备注“学习做游戏”可免费领取原创的游戏开发教程资料大合集!非学员只接受付费咨询,不闲聊,望见谅。

相关文章
|
26天前
|
存储 缓存 Java
Java中的分布式缓存与Memcached集成实战
通过在Java项目中集成Memcached,可以显著提升系统的性能和响应速度。合理的缓存策略、分布式架构设计和异常处理机制是实现高效缓存的关键。希望本文提供的实战示例和优化建议能够帮助开发者更好地应用Memcached,实现高性能的分布式缓存解决方案。
39 9
|
6月前
|
缓存 安全 Android开发
Android经典实战之用Kotlin泛型实现键值对缓存
本文介绍了Kotlin中泛型的基础知识与实际应用。泛型能提升代码的重用性、类型安全及可读性。文中详细解释了泛型的基本语法、泛型函数、泛型约束以及协变和逆变的概念,并通过一个数据缓存系统的实例展示了泛型的强大功能。
56 2
|
3月前
|
SQL 缓存 Java
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
本文详细介绍了MyBatis的各种常见用法MyBatis多级缓存、逆向工程、分页插件 包括获取参数值和结果的各种情况、自定义映射resultMap、动态SQL
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
|
4月前
|
缓存 NoSQL Java
springboot的缓存和redis缓存,入门级别教程
本文介绍了Spring Boot中的缓存机制,包括使用默认的JVM缓存和集成Redis缓存,以及如何配置和使用缓存来提高应用程序性能。
162 1
springboot的缓存和redis缓存,入门级别教程
|
6月前
|
缓存 NoSQL 数据库
go-zero微服务实战系列(五、缓存代码怎么写)
go-zero微服务实战系列(五、缓存代码怎么写)
|
6月前
|
缓存 NoSQL Java
惊!Spring Boot遇上Redis,竟开启了一场缓存实战的革命!
【8月更文挑战第29天】在互联网时代,数据的高速读写至关重要。Spring Boot凭借简洁高效的特点广受开发者喜爱,而Redis作为高性能内存数据库,在缓存和消息队列领域表现出色。本文通过电商平台商品推荐系统的实战案例,详细介绍如何在Spring Boot项目中整合Redis,提升系统响应速度和用户体验。
90 0
|
6月前
|
消息中间件 缓存 监控
go-zero微服务实战系列(六、缓存一致性保证)
go-zero微服务实战系列(六、缓存一致性保证)
|
7月前
|
缓存 前端开发
react18【系列实用教程】memo —— 缓存组件 (2024最新版)
react18【系列实用教程】memo —— 缓存组件 (2024最新版)
167 0
|
7月前
|
缓存
react18【系列实用教程】useCallback —— 缓存函数 (2024最新版)
react18【系列实用教程】useCallback —— 缓存函数 (2024最新版)
70 0
|
7月前
|
缓存
react18【系列实用教程】useMemo —— 缓存数据 (2024最新版)
react18【系列实用教程】useMemo —— 缓存数据 (2024最新版)
169 0