扩展
扩展给作品加一批新积木:画笔、音乐、物理、图层、摄像头……装上之后积木栏底下就多一类。

打开方式#
顶栏那排图标里单独有一颗「扩展库」,点击后整页覆盖上来。按 Esc 或者右上角的「关闭」
退出。
它和旁边那几颗不一样:那几颗是开关一个面板,这一颗是盖上一整页,所以它画在分隔线后面, 也不参与那一排的拖动排序。
页面构成#
最上面是标题「Gandi 扩展库」和它后面那个总数,下面一行小字是「文档中心 →」。
再往下是搜索框(「使用扩展名、作者名、描述进行搜索」)和一排分类胶囊:
| 胶囊 | 装的是 |
|---|---|
| 已安装 | 这个作品已经装上的 |
| 收藏 | 标过星的 |
| 全部 | 所有能看见的 |
| 新手推荐 | 一份挑好的名单 |
| 原版扩展 | Scratch 自带的那 11 个(画笔、音乐、文字朗读、翻译、micro:bit、LEGO 那几套……) |
| Gandi 扩展 | Gandi 官方的 |
| 社区扩展 | 别人写的 |
| 自定义扩展 | 填网址装的那一条 |
| 开发中的扩展 | 扩展自己声明成「开发中」的 |
| 实验性扩展 | 扩展自己声明成「实验性」的 |
每颗胶囊右边写着有几个。前四颗不是扩展声明的分类,是编辑器自己算的:「已安装」看这个 作品,「收藏」看这台机器,「全部」是全部,「新手推荐」是一份写死的名单(18 个扩展 id, 沿用 2.0 的推荐)。后面几颗才是扩展自己声明的分类,名单里没有的分类不显示。
这些数字不是固定的。 只有原版那 11 个和内置的「场景」是跟着编辑器一起发的,其余的 从 Gandi 的扩展服务上取:服务上有多少就显示多少,断网时这一页就只剩内置的那些。
一张卡片#

封面图、左下角的小图标、名字、一句说明,作者名写在右下角。一个扩展是几个人做的就列几个,
点作者名去他在社区的主页(新标签页打开;没登记主页的就是一行字)。
扩展自己在 tempExt.info 里写 collaboratorList: [{collaborator, collaboratorURL}] 就能登记主页,
只写 collaborator 一个名字也认。需要蓝牙的扩展在名字后面
挂一枚「蓝牙」标记;有文档的多一颗按钮。
鼠标移上去,封面右上角浮出一颗星,点它收藏。收藏记在浏览器里,属于本机偏好,不属于 作品;只按网址装的那种没有稳定的 id,收藏不了,也不显示星。
最下面那颗按钮写着「安装」。装好之后变成「已安装」,鼠标停上去变成红色的「卸载」:

三种装法#
内置和官方的:在这一页里点「安装」。
填网址:分类里那张「自定义扩展」卡片。点「安装」会弹出一个输入框,提示 「扩展的网址,或者素材集市里的扩展 ID(例如 mduiPro)」。三种写法都收:
.js文件的网址;- 素材集市里的扩展 ID;
- 素材集市的页面地址(编辑器会自己翻成代码地址)。
作品自己带:打开一个用了扩展的作品,编辑器会按作品里记的 id 把它们装回来。
装上之后#
积木栏的分类条底下多出一类,颜色和图标是扩展自己给的。

有些扩展的积木很多(几十块),分类里的每一条标题都能点着折起来,用不到的收起来即可。
卸载用的是同一颗按钮,卸掉之后积木栏里它那一类马上消失。作品里还有它的积木在用时,引擎 会拒绝,并把原因提示出来。 多场景作品里「场景」扩展卸不掉:它的按钮不会变成「卸载」,鼠标停上去写着 「有多个场景时不能卸载」,场景面板和场景积木都依赖它。
缺扩展的作品:灰色占位块#
作品用了某个扩展,而它这次没装上(网断了、服务下线、地址失效),作品不会损坏。 那些积木换成灰色的占位块,上面写着它原来的类型名:

接在它下面、塞在它里面的积木一块都不会丢,作品的数据一个字节都没改。面板上方还会有 一条提示,写明缺了哪个扩展:

扩展后来装上了,占位块自己换回真积木,那条提示也跟着消失。
打开 TurboWarp 的作品#
TurboWarp 作品把扩展写成一条 extensions.turbowarp.org 的地址,打开时照着地址装。这些
实现是按 TurboWarp 写的,有一部分在 Gandi 里跑不起来 —— 它们伸手去拿 TurboWarp 渲染器的
内部字段,或者等自己的依赖下载完才注册。艺术字、物理引擎、裁剪与混合都是这样。
而扩展库里就有这几个的移植版。所以打开这种作品时,能对上的扩展会换成扩展库里的同一个: 地址那条路断掉,改用库里的 id,装得上、能跑,也跟着 Gandi 一起更新。换过之后右下角会说一 句换了几个。
只在两种情况下换:地址是 turbowarp.org 的,而且换过去的那个 id Gandi 真认得。两条有一条不 满足就原样留着走地址那条路 —— 换成一个不存在的 id 会让整个作品都打不开,比装不上严重得多。
大多数扩展两边的 id 是一样的(移植时留了作者原本的 id),认得出来不用配。少数改过名的写在
src/vm/twCompat.ts 的表里,例如 griffpatch → box2d、sipcconsole → Consoles、
0832rxfs2 → rxfs。往表里加之前要在 Gandi 里真装一遍、对过积木 id:指错了积木会变成
一排白块。
只换这一个方向。 转换发生在读作品的时候,存回去写的就是 Gandi 的 id,不往回换。
细节#
- 扩展库这一页有一批扩展刻意不展示:Gandi 那个包里夹着十来个不是给人浏览的 (验证用的、写着「非专业人员请勿打开」的、标着扩展 ID 异常的)。它们照常装得上, 已经用了的作品能正常打开,只是不出现在列表里。
- 扩展的 C 型积木上那种能拖出来的参数(「高级数据结构」里「遍历」的键 / 值、「映射列表」 的项 / 序号)从积木上拖出来得到一份副本,原来那颗留在积木上。
- 卡片是分批渲染的(首屏 24 张),往下滚才接着画。九十几张卡片一次画完会卡。
- 这一页动效不少(背景的光团、卡片的倾斜和光斑、封面的推近)。机器跑不动就去设置 · 通用 · 编辑器里打开「精简动效」:动效全部停掉,封面、配色、布局一样不少。