云存档
目前我们的游戏已经有两关了,我们可以为游戏制作云存档,保存玩家的游戏关卡进度、背包数据等。当下次进入游戏,点击“继续游戏”时,就可以恢复上次游戏的存档。
要制作云存档,我们需要安装这个扩展:
CCW Data 积木
CCW 社区虽然也有云变量,但是延迟很高,且未来 CCW 计划下线云变量功能。
作为云变量的替代,我们可以使用 CCW Data 积木,它和云变量的用法相似。使用下面的积木,来读取和设置一个云数据:
其中,数据分成两种:用户数据或作品数据。
- 用户数据:存放当前玩家的个人数据,例如存放当前玩家的金币数量。每个玩家只能读取和设置自己的数据。
- 作品数据:存放作品的公共数据,例如存放某个关卡的最高分。
实现云列表
CCWData 没有直接保存云列表的功能。但是,提供了将列表转为 JSON 字符串,以及将 JSON 字符串覆盖到列表的功能:
(在前面的课程我们介绍过,JSON 字符串可以理解为数据表示成字符串的一种方法,例如,列表中有“1、2、苹果”,那么列表写成 JSON 字符串就是 [1,2,"苹果"])
因此,我们可以将列表转为字符串,用CCWData 保存字符串;然后再读取 CCWData,将字符串转换到列表中。
这样,我们就间接实现了云列表的功能
注意事项
- 最好不要像下面这样频繁的存入数据,最好间隔几秒存一次,或者只在需要的时候储存,避免增大服务器压力:
- 频繁读取数据是允许的,但是读取到的不一定是最新数据(每隔 2 秒才会读取一次新数据)(因此,想用 CCWData 来制作实时联机是不行的,会有 2 秒延迟)
- 如果 CCWData 之前没有设置过,读取结果为空。可以以此为依据,判断玩家是否是第一次进入游戏:
实践:为游戏制作云存档
下面,我们来为游戏制作云存档。
保存关卡进度
- 进入游戏时,我们将玩家的最新进度设为当前关卡。这样当玩家通关,进入下个关卡后,就会更新关卡进度。
- 主菜单中,只有玩家有关卡进度数据,才放置“继续游戏”按钮(数据为空,说明玩家没有进行过任何游戏)
- 当按下“继续游戏”,则读取玩家关卡进度,进入最新的关卡;如果按下“新游戏”,则重置存档,关卡设为“新手教程”:
- 可以新建一个角色,用于专门管理玩家的云数据:
在这个角色中,添加下面的代码:重置存档时,将“关卡进度”设为空。
保存玩家金币数
在“云数据管理”角色中,添加下面的代码,实现金币数的存档:
- 进入游戏时,如果“金币”云数据为空,则初始化为 0;
- 从数据库读取“金币”到变量中;
- 每 5 秒将金币的值上传到云数据库;
- 重置存档时,将金币设为 0。
这样,玩家重新进入游戏时,就就能恢复上次游玩时的金币数。
保存玩家背包
- 我们可以在一些关卡通关后,保存背包数据到云端:(新手教程除外)
- 进入游戏时,如果是新手教程,则直接清空背包;如果是其他关卡,则读取云端背包数据;如果背包没有数据,则添加默认 3 把武器,然后保存到背包数据到云端。
其中,下面的全局积木用于将 JSON 覆盖到背包列表:
- 重置存档时,将背包设为空:
这样,我们就实现了关卡进度、金币数、玩家背包的云存档。当玩家重新进入游戏时,会自动加载云存档。
上一节:02 敌人生成
下一节:04 小结
<iframe
width="100%"
height="800px"
scrolling="no"
src="https://www.ccw.site/embed?id=STG303/Arkos/Lec5/04&type=comment"
title="{射击课高级篇-第五课-04}"
frameBorder="0"
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
allowFullScreen
scrolling="0"
></iframe>