变量和列表
变量用来保存作品运行中的数据,列表是一组变量。这一篇讲怎么新建、怎么改名和删除、怎么修改 一个已有变量的作用域,以及 Gandi 3.0 比原版多出的那一档「仅本场景」。把它们显示在舞台上, 见舞台上的监视器。
新建#
变量和列表在积木栏里是两个分类,各有自己的图标和颜色(列表是橙红,和列表积木一致)。 新建的按钮在各自分类顶上:「变量」里是「建立一个变量」,「列表」里是「建立一个列表」。

中间那块橙色的不是装饰,它就是建好之后会出现在积木栏里的那块积木,名字直接写在它 身上。建列表时它是橙红色,也就是列表积木的颜色:

Enter 等于「确定」,Esc、点背景、右上角 × 都是取消。
三个档位:谁看得见#
| 档 | 谁看得见 | 存在哪 |
|---|---|---|
| 全局变量 / 全局列表 | 所有场景、所有角色 | 舞台 |
| 仅本场景 | 这个场景里的所有角色;切换场景后它根本不存在 | 舞台 |
| 仅本角色 | 只有当前这个角色 | 角色自己 |
默认选中的是「仅本场景」:一关的分数、血量本来就应当随关卡变化,需要共用时再特意选择 全局。排列顺序从大到小:全局 → 本场景 → 本角色。
左边那个小图标画的是作用域:容器在上、值条在下,值条铺多宽就表示这份值属于谁。
- 仅本场景 —— 一排屏(一块屏代表一个场景),只有第一块底下有条:只有这个场景里有它;
- 仅本角色 —— 换成一排角色卡片,只有第一个底下有条:只有它能用;
- 全局 —— 一个地球:所有场景共用。
前两张是同一张图换了容器,因为这两种情况本来就对称:换一个场景、换一个角色,都看不见它。 全局那一档原本也用这套记号(两块屏共一条),但「两条」和「一条」在 24 像素下只差中间一道 缝,难以分辨,所以换成了轮廓完全不同的地球。
在舞台上建变量时「仅本角色」是灰的,提示写着「舞台上的只能是全局的」:

积木栏里分开列#
建好之后,「变量」分类里的变量和列表按这三档分开列出,每一档一条小标题,顺序同样从大 到小:

一个角色能看见的变量本来就来自三个地方,过去它们排成一列,名字挨着名字,无法分辨各自的 来源。作用域不是细节:换场景、换角色、复制角色时,它决定这个变量是否还在。
只有一档时不显示标题(例如一个作品里全是全局变量),此时标题没有信息量。列表那一段同理, 各自分组。
重名#
名字重复时当场拦截,不会等到关闭对话框才报错:

名字留空时提示「给这个变量起个名字」。「仅本场景」和「全局」都建在舞台上,所以它们的重名 检查针对同一批名字。
改名、删除、换作用域#
在积木栏里右键那块变量(或列表)积木:

| 菜单项 | 作用 |
|---|---|
| 修改变量名 | 同一个对话框,但没有那三个档位:改名不改变作用域 |
| 删除变量「X」 | 连同用到它的积木一起删除 |
| 修改变量作用域… | 在三档之间切换,打开一个对话框(见下) |

删除时用到它的积木在两处以上才会确认(「删除 2 处「分数」变量吗?」)。只有一处或者 没有任何引用时直接删除,不再确认。
工作区里的变量积木右键也有同样的那一条作用域,另外还有「复制」「添加注释」「删除」、一组 「换成别的变量」和「添加到资源库」。
改作用域#
「修改变量作用域…」打开的对话框与新建时相同:同一排三档、同一套图标,当前那一档标着 「现在」:

三档两两可换,包括角色私有和舞台之间:
| 换成 | 会发生什么 |
|---|---|
| 全局变量 | 所有场景共用一份;原本是「仅本场景」时,别的场景各自那一份值会丢失 |
| 仅本场景 | 只有这个场景里有它,别的场景里用到它的积木会失效 |
| 仅本角色 | 变量移到当前这个角色上,别的角色不再能看见它 |
选中某一档时,下面先写出这一档的后果:值的去向、哪些角色的积木会变成「未定义」,这些在切换 之后就无法再查到。有角色受影响时这句话显示为红色,并指明是哪几个。
迁移过程不改名字也不改值,变量的身份不变,所以那个角色原有的积木照常可用。别的角色引用 它的积木会变成「未定义」,这是「仅本角色」本身的含义。
名字重复时这一步无法完成,提示写在同一行,「确定」随之置灰:舞台上已有同名变量(向上迁移 时),或者那个角色上已有同名变量(向下迁移时)。在舞台上修改时「仅本角色」是灰的,与新建时 一致。
修改后不能撤销(Ctrl + Z 作用于积木,不作用于变量的作用域),所以每一档的后果都会
预先写明。修改完成后弹出一句提示说明改了什么:「已改为全局变量,另外 2 个场景那一份值没了」
「已改为仅本角色,只有「小猫」能用」。
改完之后第一次按 Ctrl + Z 什么都不撤,只提示「修改变量作用域不能撤销,再按一次撤销更早的
编辑」;再按一次才继续往下撤 —— 这一下是为了拦住「作用域改不回来,却顺手把上一次的积木编辑
撤掉了」。
广播#
广播(消息)不是变量,但它的下拉是同一套控件,所以顺带说一下。
点广播积木上的下拉,列出这个作品里所有的消息,最上面是「新消息」,最下面是**「修改消息名」**:
| 菜单项 | 作用 |
|---|---|
| 新消息 | 建一条新消息,并把这块积木指过去 |
| 修改消息名 | 给当前选中的这条消息改名 |
改名之后发送方和接收方的积木一起跟上——「广播 (开始)」和「当接收到 (开始)」指的是 同一条消息,改的是那条消息本身,不是某一块积木上的字。
改成另一条已有消息的名字不会生效:两条同名的消息在积木上完全分不出来。
消息没有「删除」:没有任何积木用到它时它自己就消失了,这是 Scratch 一直以来的规矩。
新建和改名用的是同一个对话框,穿的是事件那一类的黄色——里面那块积木就是将要出现在 「事件」里的那一块。
多场景下变量归谁#
- 全局的:所有场景共用同一个,不是复制也不是同步。
- 仅本场景:只属于建立它的那个场景。切到别的场景后,那个变量根本不存在,而不是 变成 0。
- 积木栏里列出的是正在编辑的那个场景的变量,不是舞台当前在演的那个场景的。
更多见场景。
云变量#
这个编辑器无法新建云变量。 新建对话框里没有这一档,在这里建立的变量一律不是云变量。
作品里原有的云变量(从别的编辑器导入的那种)照常列在积木栏里。「数据管理」面板会把它们 单独标为「云变量」排在最前面,不过那个面板现在盖着一层写着「数据管理开发中,敬请期待」的 遮罩:底下的界面照常画出来,但点不动,见 Gandi 面板。