游戏开发实战教程(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。


对象的存储。


对象的读取。


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













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

相关文章
|
2月前
|
缓存
Autojs4.1.0实战教程---快手极速版清理缓存
Autojs4.1.0实战教程---快手极速版清理缓存
59 1
|
2月前
|
存储 XML 缓存
【深入浅出Spring原理及实战】「缓存Cache开发系列」带你深入分析Spring所提供的缓存Cache功能的开发实战指南(一)
【深入浅出Spring原理及实战】「缓存Cache开发系列」带你深入分析Spring所提供的缓存Cache功能的开发实战指南
233 0
|
2月前
|
存储 缓存 NoSQL
Redis入门到通关之Redis缓存数据实战
Redis入门到通关之Redis缓存数据实战
39 0
|
2月前
|
缓存 监控 负载均衡
【分布式技术专题】「缓存解决方案」一文带领你好好认识一下企业级别的缓存技术解决方案的运作原理和开发实战(数据缓存不一致分析)
【分布式技术专题】「缓存解决方案」一文带领你好好认识一下企业级别的缓存技术解决方案的运作原理和开发实战(数据缓存不一致分析)
65 2
|
2月前
|
缓存 应用服务中间件 数据库
【分布式技术专题】「缓存解决方案」一文带领你好好认识一下企业级别的缓存技术解决方案的运作原理和开发实战(多级缓存设计分析)
【分布式技术专题】「缓存解决方案」一文带领你好好认识一下企业级别的缓存技术解决方案的运作原理和开发实战(多级缓存设计分析)
78 1
|
2月前
|
存储 缓存 监控
【分布式技术专题】「缓存解决方案」一文带领你好好认识一下企业级别的缓存技术解决方案的运作原理和开发实战(数据更新场景策略和方案分析)
【分布式技术专题】「缓存解决方案」一文带领你好好认识一下企业级别的缓存技术解决方案的运作原理和开发实战(数据更新场景策略和方案分析)
35 0
|
2月前
|
缓存 NoSQL 前端开发
【Redis技术专区】「实战案例」谈谈使用Redis缓存时高效的批量删除的几种方案
【Redis技术专区】「实战案例」谈谈使用Redis缓存时高效的批量删除的几种方案
67 0
|
2月前
|
缓存
AutoJS4.1.0实战教程 ---火火视频极速版签到、清理缓存和自动评论
AutoJS4.1.0实战教程 ---火火视频极速版签到、清理缓存和自动评论
23 0
|
2月前
|
缓存
Autojs4.1.0实战教程---火山极速版清理缓存
Autojs4.1.0实战教程---火山极速版清理缓存
36 0
|
5天前
|
存储 缓存 NoSQL
redis缓存优化
采用获取一次缓存,如果为空的情况,获取分布式锁,让一个线程去重建缓存,另外的线程未获取到锁的情况,休眠短时间,然后再自旋获取缓存。
14 0