跳到主要内容

事件

VirtualMachine 扩展 Node 的 EventEmitter。编辑器和播放器监听这些事件以保持 UI 同步,您也可以:

vm.on('PROJECT_CHANGED', () => {
console.log('the project was edited');
});

VM 以相同名称重新发出运行时的大部分事件,因此您通常监听 vm。少数只在 vm.runtime 上触发;下面已注明。此列表取自 scratch-vm/src/virtual-machine.jsscratch-vm/src/engine/runtime.js

播放与运行

事件触发时
PROJECT_START绿旗被按下。
PROJECT_RUN_START线程本帧开始运行(从空闲到活动)。
PROJECT_RUN_STOP所有线程已停止(从活动到空闲)。
PROJECT_CHANGED项目以影响序列化的方式被编辑。
PROJECT_LOADED项目完成加载。在 vm.runtime 上触发。
TURBO_MODE_ON / TURBO_MODE_OFF涡轮模式被切换。
RUNTIME_STARTED / RUNTIME_STOPPED运行时的步进循环开始或停止。

加载进度

事件负载
LOAD_PROGRESS{stage, loaded, total},其中 stageunzippingparsingcheckingbuildinginstalling 之一。
ASSET_PROGRESS项目资产下载时的 (finished, total)

目标、积木和工作区

事件负载
targetsUpdate{targetList, editingTarget}。目标列表更改或选择更改。
workspaceUpdate编辑目标的积木,用于重建积木工作区。
MONITORS_UPDATE当前监视器(舞台观察器)状态。
BLOCK_DRAG_UPDATE / BLOCK_DRAG_END积木正在 GUI 上拖动 / 拖动完成。
VISUAL_REPORT要在被点击的报告积木旁边显示为气泡的值。
SCRIPT_GLOW_ON / SCRIPT_GLOW_OFF脚本开始或停止发光。
BLOCK_GLOW_ON / BLOCK_GLOW_OFF单个积木开始或停止发光。
PROJECT_STOP_ALLSTOP_FOR_TARGET停止按钮被点击 / 一个目标被停止。在 vm.runtime 上触发。

扩展

事件触发时
EXTENSION_ADDED扩展的积木分类被注册。负载是分类信息。
EXTENSION_REMOVED扩展被移除。
EXTENSIONS_REORDERED扩展顺序更改。
EXTENSION_FIELD_ADDED扩展注册了一个自定义字段类型。
BLOCKSINFO_UPDATE扩展的积木被刷新(例如 locale 更改后)。
PERIPHERAL_LIST_UPDATEUSER_PICKED_PERIPHERALPERIPHERAL_CONNECTEDPERIPHERAL_DISCONNECTEDPERIPHERAL_REQUEST_ERRORPERIPHERAL_CONNECTION_LOST_ERRORPERIPHERAL_SCAN_TIMEOUT外设扫描和连接生命周期。

设置已更改

这些在匹配的设置器运行后触发,因此 UI 可以更新:

事件负载
RUNTIME_OPTIONS_CHANGED当前的运行时选项。
COMPILER_OPTIONS_CHANGED当前的编译器选项。
FRAMERATE_CHANGED新的帧率。
INTERPOLATION_CHANGED插值是否开启。
STAGE_SIZE_CHANGED(width, height)
COMPILE_ERROR脚本编译失败时的 (target, error)
HAS_CLOUD_DATA_UPDATE项目是否使用云变量。
MIC_LISTENING麦克风是否活动。
LOCALE_CHANGEDsetLocale 之后的新 locale。

积木询问宿主

一些积木需要宿主 UI 响应。这些在 vm.runtime 上触发:

  • SAY:角色说话或思考(say/think 积木)。
  • QUESTION:一个"询问并等待"积木正在等待输入。宿主收集答案并在运行时上发出 ANSWER 事件以解除脚本阻塞。

另请参阅