拓展作用
在使用 Scratch 编程的时候,我们经常遇到希望把若干数据转换成一串字符的情况,例如,制作存档码。
一种常见的做法是:使用分隔符来分隔多个数据。
然后使用便利积木取出数据:
在一些更复杂的情况中,我们还想将列表的内容转为一串字符,这时再用分隔符的做法就会比较复杂。
这时,我们就可以使用存档码拓展。存档码拓展能够非常方便的将多个变量、列表转换成存档码,再将存档码转为变量、列表
拓展原理
这个拓展使用一个“容器”。
你可以将一些变量和列表存进去,通过这个“容器”转变成一串字符;
(如果你了解过Javascript、 JSON ,实际上“容器”就是对象,“容器”对应的字符也就是 JSON 字符串)
基础积木
清空容器。清空容器中的内容
将单个内容加入容器。用于将单个数据加入容器。
将变量的内容加入容器。将一个变量的内容加入容器。
将列表加入容器。将一个列表加入容器。
容器对应字符串。将容器的内容转成一串字符。
例如,运行下面的代码:
得到容器中内容:{"数据1":100,"数据2":"苹果","列表1":["第一项","第二项","第三项"]}
其中 :
- {XXX} 表示容器( {} 则表示空容器)
- [XXX] 表示列表( [] 则表示空列表)
- “数据1“:XX 表示容器中有一个名为”数据1“的数据 XX,其中 XX 可以是:
- 数值,例如 100,100.0
- 字符串,例如 “苹果”,“香蕉”(字符串要带双引号)
- 列表,如 [1,2,3],[”第一项”,123,”苹果”]
- 容器,例如 {”数据”:100,”列表”:[1,2,”苹果”]}
例子:
- {"数据1":100,"数据2":"苹果","列表1":["第一项","第二项","第三项"]}
- {"player1":{”ID”:”fd03”,”血量”:100},"player2":{”ID”:”DX3e”,”血量”:50},"AI":{”ID”:”dsc3”,”血量”:-5}},
- [{”name”:”Shawn”,”score”:”100”},{”name”:”Arkos”,”score”:”98”},{”name”:”yk1boy”,”score”:”99”}]
读取字符串到容器。
注:只有满足容器格式,才能读取成功,否则会读取失败。
读取失败时不会进行任何操作,容器保持原来的内容。
是否读取成功。用于判断读入的字符串格式是否正确。
获取容器中名为…的内容。
将容器中的…保存到变量。
将容器中的…保存到列表。
辅助积木
获取容器中内容总数。例如,容器中有两个变量,两个列表,则返回4。
获取容器第…个内容的XX:
- 名称:内容的名字
- 内容:内容的值
- 类型:内容的类型,返回变量/列表/容器
- 列表长度:如果内容是列表,返回列表长度;否则返回空
容器是否包含名为…的内容
容器名为…的列表的长度。如果列表不存在,则返回空
获取容器中名为…的列表的第n项。如果列表不存在或者索引不正确,返回空
删除容器中名为…的内容
附加积木
复制内容到剪切板。可以用于让玩家复制存档码。
用XX方法加密…,以XX作为密匙。
用XX方法解密…,以XX作为密匙。
其中密匙的作用是,只有加密和解密时密匙相同,才能正确解密。
因此,可以将用户ID作为密匙,这样只有同一个用户进行加密解密,才能得到正确结果。从而实现只有生成存档码的玩家才能使用这个存档码,每个玩家只能使用自己的存档码。
(目前这个加密算法有一些问题,一些中文字符例如“!”无法被正确加密)
获得字符的 Unicode 编码。
获取 Unicode 编码对应的字符。
这两个积木可以用于编写自己的加密算法。
最佳实践
例子 A:制作存档码
生成存档码:
一种简单的做法如下:
得到的存档码形如:{"金币":0,"关卡进度":0,"经验值":0,"列表1":["第一项","第二项","第三项"]}
考虑到上面的存档码比较简单,容易篡改,可以对存档码进行加密:
读取存档码:
例子 B:制作云存档
- 一种简单的制作云存档的方法:
存档:
读档:
- 如果要保存列表到云存档,要怎么做呢?
可以使用如下的积木。他们可以将列表转成一串字符,以及读取字符到列表
存档和读档如下:
- 如果使用存档码拓展,则可以这么写:
例子 C:存档码拓展和 Simple MMO 的结合使用
- 我们知道,Simple MMO 中,每个玩家只有一个额外数据,但是玩家可能会有很多需要传输的数据,比如玩家的血量、阵营、背包……要将这么多数据存入一个额外数据,会很头疼。
而如果使用存档码拓展,就可以很方便地解决这个问题:
- 在使用 Simple MMO 广播的时候,可能需要传入多个参数,这个时候就可以使用存档码拓展。
例子 D:将多个信息存到列表的一项
- 例如,对于格子地图,我们通常使用一个列表来存放一张地图的信息。
当我们需要存多张地图时,如果能将一张地图的信息转成一串字符,存入列表的一项,就可以做到一个列表存多张地图。并且方便管理。
- 再比如,我们想用列表存放武器的定义信息,我们可以用列表的一项来存一个武器的定义:
更新日志
版本 | 更新内容 |
1.0 | 发布拓展 |