Logo
    打开 Gandi IDE
    Gandi IDE 🧑‍💻 开发者中心 @ 共创世界

    Designed by 2ndR with love @ Chengdu

    Tencent QQGitHub

    Archive Code

    📚 返回主页面
    ‣
    更多链接

    其他扩展文档

    如何使用 Gandi 多莉实现检测到底碰到了哪个克隆体
    Simple MMO
    媒体助手 Media Utils 文档
    Archive Code
    Arkos Code Snippets
    Regex VI
    4D Pocket
    Data Utils
    Pure Math
    A* 奥德赛
    社区连接 Kontakt
    Featured
    Sugar
    Canvas
    Physics Engine
    Fermi
    Terminal
    🎮
    移动端配置按键
    G-Kamera
    AI Hub
    Animate Text 艺术字 2.0
    Quake 雷神

    拓展作用

    在使用 Scratch 编程的时候,我们经常遇到希望把若干数据转换成一串字符的情况,例如,制作存档码。

    一种常见的做法是:使用分隔符来分隔多个数据。

    image

    然后使用便利积木取出数据:

    image

    在一些更复杂的情况中,我们还想将列表的内容转为一串字符,这时再用分隔符的做法就会比较复杂。

    这时,我们就可以使用存档码拓展。存档码拓展能够非常方便的将多个变量、列表转换成存档码,再将存档码转为变量、列表

    拓展原理

    这个拓展使用一个“容器”。

    你可以将一些变量和列表存进去,通过这个“容器”转变成一串字符;

    (如果你了解过Javascript、 JSON ,实际上“容器”就是对象,“容器”对应的字符也就是 JSON 字符串)

    基础积木

    清空容器。清空容器中的内容

    image

    将单个内容加入容器。用于将单个数据加入容器。

    image

    将变量的内容加入容器。将一个变量的内容加入容器。

    image

    将列表加入容器。将一个列表加入容器。

    image

    容器对应字符串。将容器的内容转成一串字符。

    image

    例如,运行下面的代码:

    image
    image

    得到容器中内容:{"数据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":["第一项","第二项","第三项"]}
    • 👉
      表示容器中有三个内容,数据1为100,数据2为苹果,列表1有三项,依次是第一项、第二项、第三项
    • {"player1":{”ID”:”fd03”,”血量”:100},"player2":{”ID”:”DX3e”,”血量”:50},"AI":{”ID”:”dsc3”,”血量”:-5}},
    • 👉
      表示容器中有三个容器,player1,player2,AI。每个容器中有ID、血量两个数据。
    • [{”name”:”Shawn”,”score”:”100”},{”name”:”Arkos”,”score”:”98”},{”name”:”yk1boy”,”score”:”99”}]
    • 👉
      表示一个列表,其中有三个容器,每个容器中有 name、score 两个数据。

    读取字符串到容器。

    image

    注:只有满足容器格式,才能读取成功,否则会读取失败。

    image

    读取失败时不会进行任何操作,容器保持原来的内容。

    是否读取成功。用于判断读入的字符串格式是否正确。

    image

    获取容器中名为…的内容。

    image

    将容器中的…保存到变量。

    image

    将容器中的…保存到列表。

    image

    辅助积木

    获取容器中内容总数。例如,容器中有两个变量,两个列表,则返回4。

    image

    获取容器第…个内容的XX:

    • 名称:内容的名字
    • 内容:内容的值
    • 类型:内容的类型,返回变量/列表/容器
    • 列表长度:如果内容是列表,返回列表长度;否则返回空
    image

    容器是否包含名为…的内容

    image

    容器名为…的列表的长度。如果列表不存在,则返回空

    image

    获取容器中名为…的列表的第n项。如果列表不存在或者索引不正确,返回空

    image

    删除容器中名为…的内容

    image

    附加积木

    复制内容到剪切板。可以用于让玩家复制存档码。

    image

    用XX方法加密…,以XX作为密匙。

    image

    用XX方法解密…,以XX作为密匙。

    image

    其中密匙的作用是,只有加密和解密时密匙相同,才能正确解密。

    因此,可以将用户ID作为密匙,这样只有同一个用户进行加密解密,才能得到正确结果。从而实现只有生成存档码的玩家才能使用这个存档码,每个玩家只能使用自己的存档码。

    (目前这个加密算法有一些问题,一些中文字符例如“!”无法被正确加密)

    获得字符的 Unicode 编码。

    image

    获取 Unicode 编码对应的字符。

    image

    这两个积木可以用于编写自己的加密算法。

    最佳实践

    例子 A:制作存档码

    生成存档码:

    一种简单的做法如下:

    image

    得到的存档码形如:{"金币":0,"关卡进度":0,"经验值":0,"列表1":["第一项","第二项","第三项"]}

    考虑到上面的存档码比较简单,容易篡改,可以对存档码进行加密:

    image

    读取存档码:

    image

    例子 B:制作云存档

    1. 一种简单的制作云存档的方法:

    存档:

    image

    读档:

    image
    1. 如果要保存列表到云存档,要怎么做呢?

    可以使用如下的积木。他们可以将列表转成一串字符,以及读取字符到列表

    image

    存档和读档如下:

    image
    1. 如果使用存档码拓展,则可以这么写:
    image

    例子 C:存档码拓展和 Simple MMO 的结合使用

    1. 我们知道,Simple MMO 中,每个玩家只有一个额外数据,但是玩家可能会有很多需要传输的数据,比如玩家的血量、阵营、背包……要将这么多数据存入一个额外数据,会很头疼。
    2. 而如果使用存档码拓展,就可以很方便地解决这个问题:

    image
    1. 在使用 Simple MMO 广播的时候,可能需要传入多个参数,这个时候就可以使用存档码拓展。
    image
    image

    例子 D:将多个信息存到列表的一项

    1. 例如,对于格子地图,我们通常使用一个列表来存放一张地图的信息。

    当我们需要存多张地图时,如果能将一张地图的信息转成一串字符,存入列表的一项,就可以做到一个列表存多张地图。并且方便管理。

    image
    image
    1. 再比如,我们想用列表存放武器的定义信息,我们可以用列表的一项来存一个武器的定义:
    image

    更新日志

    版本
    更新内容
    1.0
    发布拓展

    本页索引

    • 拓展作用
    • 拓展原理
    • 基础积木
    • 辅助积木
    • 附加积木
    • 最佳实践
    • 例子 A:制作存档码
    • 生成存档码:
    • 读取存档码:
    • 例子 B:制作云存档
    • 例子 C:存档码拓展和 Simple MMO 的结合使用
    • 例子 D:将多个信息存到列表的一项
    • 更新日志