上一节我们讲了如何在小游戏制作工具中使用云函数,这一节我们继续拓展一下,通过使用云函数调用数据库来实现玩家数据的持久存储。
一个游戏中包含各种类型的数据,有些数据不需要持久存储,如玩家的偏好设置,选择的背景音乐,主题等等,这些数据我们可以通过使用缓存插件来将数据存储在本地(有关缓存插件的使用方法,可以参考这篇文章),但是有些数据就需要持久存储,例如玩家的获得的最高分,以及玩家闯过的关卡等。
对于微信小游戏来讲,缓存在本地的数据会在游戏更新时被清除掉,如果每次更新游戏,玩家之前的游戏数据都被抹除,都需要重新玩的话,体验非常的不好。
所以今天我们就来讲一下云开发中的数据库的使用,通过使用云数据我们可以持久的存储玩家的数据,这样每次游戏更新时,玩家都可以从云数据库中获取到自己的游戏数据,继续进行游戏了。
本教程的学习前提需要你已经了解如何在小游戏制作工具中使用云函数,如果不了解的话请移步这里学习。
首先,我们登陆云开发的后台,选择数据库新建一个集合,命名为 playerdata,用于存储玩家的数据。
接下来我们需要了解几个重要的概念,一个是集合,一个是集合中的数据 id,可以把集合想象成一个大筐子,你可以往这个筐子里装任何的东西,对于装进去的每一样东西我们都需要给它打一个标识,并把这个标识记录下来,便于之后的查找。当你想要在这筐子里找到某一件东西时,最好的方式就是先知道这个东西的标识,然后去看一下在记录中有没有这个标识,如果有的话那么这个东西就一定在筐子里,你也就一定能够通过标识找到它。
数据id 就是标识,这个标识最好是唯一的,即通过一个标识只能找到唯一的一样东西(数据)。如果每一位玩家都有一个唯一的标识的话,我们就可以通过这个唯一的标识来添加或者查找这位玩家的数据了。
这个唯一的标识,微信已经为我们提供了,叫做OpenID(用户唯一标识),对于微信小游戏来讲,每一位玩家都会有一个唯一的 OpenID,只要我们获取到 OpenID,就可以通过它来记录或者查找玩家的数据了。
说一下具体的实现思路:首先我们在微信小游戏制作工具中使用微信登陆积木获取到登陆凭证,接着将登陆凭证传递给要调用的云函数,在云函数中对登陆凭证进行校验,获得唯一的标识 openid,最后再将 openid 回传到小游戏制作工具中。
与微信登陆凭证相关的内容,可以参考这里。
https://developers.weixin.qq.com/miniprogram/dev/api/open-api/login/wx.login.html
接下来我们就实现一下这个完整的过程。
首先,在小游戏制作工具中布置一个测试场景,用于显示各种操作的返回结果。
接着在“获取唯一标识”的文本上增加如下的积木块。
使用“微信登陆”积木块获得登陆凭证,然后将登陆凭证作为参数传递给云函数,如果云调用成功返回了,那么就将用户的唯一标识 openid 缓存在本地。这样只要本地有缓存的 openid,就不需要每次都去调用云函数获取了。
接下来,我们看一下云函数的实现。新建一个云函数,命名为“login”
然后将下方的代码添加到 “login” 云函数中。