Gandi 3.0文档
官网 打开编辑器
文档/角色与场景

场景积木

作品有了第二个场景之后,积木栏底下会多一类「场景」。这一篇是这一类里每块积木的说明。 场景本身怎么建、怎么排、三档状态是什么意思,见 多场景。

积木栏里能看见 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] 个场景」逐个取

相关#