文档/角色与场景
场景积木
作品有了第二个场景之后,积木栏底下会多一类「场景」。这一篇是这一类里每块积木的说明。 场景本身怎么建、怎么排、三档状态是什么意思,见 多场景。
积木栏里能看见 39 块,另有 7 块被取代的老积木收了起来(老作品里依然存在、依然可以 运行,见最后一节)。分类里第一组不带标题,直接列出最常用的七块;其余五组默认折起,点标题 展开。
场景怎么填#
所有写着 [场景] 的地方都是一个插槽,不是固定的下拉框:
- 点开选一个场景;
- 也可以把别的积木拖进去,或者直接填名字,按名字和按 id 都能识别。
「当从场景 [ ] 进入本场景」那一块的下拉里多一项「任意场景」(值是空),选它表示每次进入 都执行。「场景 [X] 响应按键 [开/关]」的下拉是「开」和「关」。
最常用的七块#

| 积木 | 作用 |
|---|---|
| 当场景开始 | 每次进入本场景都执行一遍,从别的场景回来也算一次 |
| 当离开本场景 | 在切换真正发生之前执行,最多 3 秒;存分数、收尾等操作放在这里 |
| 切换到场景 [X] | 本场景其它脚本立即停止,画面切换过去 |
| 返回上一个场景 | 回到切换进本场景之前的那一个;没有切换记录时不执行任何操作 |
| 重新开始本场景 | 克隆体和脚本全部清除后重新开始,「当离开本场景」不会执行 |
| 当前场景 | 报告场景的名字,可以直接与文本比较 |
| 当前场景是 [X]? | 判断当前场景是否为它 |
切换与参数#

切换场景时可以同时带一份数据过去,由目标场景接收。
| 积木 | 作用 |
|---|---|
| 当从场景 [X] 进入本场景 | 只有上一个场景是它时才执行;选「任意场景」则每次进入都执行 |
| 切换到场景 [X],参数 [键] = [值] | 携带这些键值切换过去。点 ➕ 可以多带几组,最多 12 组 |
| 当场景开始(带 ➕) | 点 ➕ 添加一颗参数椭圆,右键给椭圆改名;这个名字就是「场景参数 [关卡]」里用的名字。椭圆拖出来可直接当值使用 |
| 场景参数 [键] | 取切换进本场景时带来的值;未携带该参数时为空 |
| 有场景参数 [键]? | 用来区分「未携带该参数」和「携带的是空字符串」 |
| 设置场景参数 [键] 为 [值] | 暂存,下一次切换时一起发送 |
| 清空场景参数 | 丢弃暂存但尚未发送的参数;当前场景已经收到的不受影响 |
「切换到场景 …,参数 …」可以一次带够参数:点 ➖ 减到一组都不剩时,积木上写的是 「不带参数」。键留空的那一组会被跳过。
场景之间通信#

| 积木 | 作用 |
|---|---|
| 向场景 [X] 广播 [消息] | 目标场景用普通的「当接收到 [消息]」接收。目标场景休眠时先排队,等它下次开始再送达 |
| 向所有场景广播 [消息] | 每个场景都接收,包括当前场景 |
| 向场景 [X] 发送 [消息] 数据 [数据] | 比广播多带一份数据,只有下面那块能接收 |
| 当收到场景消息 [消息],数据 (数据) | 接收上面那块发出的消息。椭圆里是发送方带来的数据,拖出来当值使用;上一条尚未执行完时不会重复触发 |
两者的区别是:广播可以送给休眠的场景(排队等它开始),发送数据不行,接收方必须 正在运行,休眠的场景收不到。暂停的场景两种都收不到:它的脚本不参与派发,广播也不会为它 排队。
同时运行多个场景#

运行与停止#
| 积木 | 作用 |
|---|---|
| 在后台运行场景 [X] | 它的脚本和声音照常执行,画面仍留在当前场景 |
| 在后台运行场景 [X] [Y](带 ➕➖) | 一次启动多个,最多 16 个 |
| 停止场景 [X] | 脚本、克隆体、声音全部清除,场景回到休眠;再次运行时从头开始 |
| 暂停场景 [X] | 脚本停在原地等待「继续场景」;声音停止,继续时不续播 |
| 继续场景 [X] | 继续执行 |
| 显示场景 [X] | 把它换到画面上,原场景转到后台继续执行(「切换到场景」会停掉原场景) |
| 场景 [X] 响应按键 [开/关] | 画面上的场景一直响应,这个开关只对后台场景有意义 |
查询状态#
| 积木 | 作用 |
|---|---|
| 场景 [X] 正在运行? | 在场上且没有暂停;休眠的、已卸载的都算不在运行 |
| 正在运行的场景数 | 画面上的场景也计入 |
按需装入与卸载#

装入#
| 积木 | 作用 |
|---|---|
| 加载场景 [X] 完成后 ⊂ | C 形积木。装入完成前脚本停在这里,完成后才执行里面那一段;已经装入则直接往下执行 |
| 预加载场景 [X] | 把它装回内存,脚本在这里等待装入完成;完成后也不会让它运行起来 |
| 预加载场景 [X] [Y](带 ➕➖) | 一次装入多个,而且不等待:脚本立即继续往下执行,装入在后台进行 |
| 场景 [X] 已装入? | 已卸载且尚未装回的为假;休眠但仍在内存里的为真 |
卸载#
| 积木 | 作用 |
|---|---|
| 卸载场景 [X] | 释放它的图片和声音占用的内存。画面上的场景和入口场景不能卸载(跳过,不报错) |
| 卸载场景 [X] [Y](带 ➕➖) | 一次卸载多个,不能卸载的跳过 |
| 卸载闲置场景 | 休眠、没有脚本在执行、且不是画面上的场景或入口场景的,全部卸载 |
卸载释放的是内存里的图片和声音,不是存盘的字节,保存时一个文件都不会丢失。
场景清单#

| 积木 | 作用 |
|---|---|
| 场景数量 | 场景的总数 |
| 第 [N] 个场景 | 报告它的名字。序号从 1 起,顺序与场景面板里从上到下的顺序一致;越界返回空 |
| 存在场景 [X]? | 是否存在这个名字 / id 的场景 |
| 上一个场景 | 切换进本场景之前的那一个,「返回上一个场景」回到的就是它 |
| 入口场景 | 点绿旗时从这个场景开始 |
几种常见用法#
携带关卡号进入下一关
切换到场景 [第二关],参数 [关卡] = [3]到了「第二关」里:
当场景开始
如果 <有场景参数 [关卡]?> 那么
把 [难度] 设为 (场景参数 [关卡])让椭圆直接落在帽子积木上,用带 ➕ 的那块「当场景开始」:点 ➕ 添加一颗椭圆、右键改名为
关卡,再把椭圆拖到需要用它的地方。
前台播放过场动画,后台预先装载下一关
在后台运行场景 [第二关]
… 放动画 …
显示场景 [第二关]用「显示场景」而不是「切换到场景」,原场景才会继续在后台运行。
大作品:进关之前先装入,出关之后卸载
加载场景 [第三关] 完成后
切换到场景 [第三关]当离开本场景
卸载闲置场景两个场景之间通信
向场景 [小地图] 发送 [玩家移动了] 数据 (x 坐标)小地图那边:
当收到场景消息 [玩家移动了],数据 (数据)
把 [标记x] 设为 (数据)接收方必须正在运行(例如先执行「在后台运行场景 [小地图]」),休眠的和暂停的都收不到;要 发给休眠的场景就用广播。
收起来的老积木#
这 7 块在积木栏里不显示,但作品里已有的依然存在、依然可以运行。它们都有替代积木:
| 老积木 | 改用 |
|---|---|
| 切换到场景 [X],参数 [键] = [值](只带一对) | 「切换到场景 …,参数 …」,可以加减 |
| 当场景开始,带参数 (…)(一串 JSON) | 带 ➕ 的「当场景开始」,每颗椭圆是一个具名参数 |
| 全部场景参数 JSON | 逐个取用「场景参数 [键]」 |
| 场景 [X] 的状态 | 「场景 [X] 正在运行?」 |
| 场景 [X] 的线程数 | 调试用的读数,没有替代 |
| 场景 [X] 的造型和声音已解码? | 「加载场景 [X] 完成后」 |
| 所有场景名称 JSON | 用「场景数量」加「第 [N] 个场景」逐个取 |