编辑器与积木
用法指南

Objector v1.0.4 完整参考手册 — 涵盖编辑器操作、12 大积木模块、100+ 积木的详细用法说明

📚 目录

🖥️ 编辑器入门

Objector 是一款基于 Electron 的图形化积木编程桌面编辑器,支持 Windows 平台。

🎨

积木面板(左侧)

按分类浏览所有积木。点击分类名切换显示,将积木拖入画布即可使用。积木间通过端口自动吸附连接。

📐

积木画布(中央)

主要的编程区域。拖拽积木组合成程序。支持滚轮缩放、右键菜单(复制/删除/折叠/批注/Ctrl+T 跳转标签)。

🎭

舞台(右侧)

精灵活动的可视化区域。运行程序后精灵在此显示和移动。支持多精灵管理。

▶️

运行控制

工具栏提供 ▶ 运行 / ⏹ 停止 按钮。运行后所有 🚩"当程序启动时" 积木链开始执行。

🐛

开发者模式

切换到开发者模式可启用断点设置、单步执行、变量监视面板等高级调试工具。

📂

项目管理

新建项目时选择父文件夹,自动在其下创建"我的作品"子目录。支持项目重命名(同步更新磁盘目录名)。导出为 HTML 可分享给他人运行。

🔌

扩展系统

通过 JSON/JS 扩展文件自定义新积木类型。点击工具栏 📖 文档按钮可查看扩展编写指南。

🏷️

三种模式

新手模式:精简积木;普通模式:完整功能;开发者模式:调试工具。

积木形状说明: 帽子型 (hat) = 事件入口,程序从这里开始; 堆叠型 (stack) = 普通指令; C型槽 (c-block) = 包含子代码的容器; 报告器 (reporter) = 返回值; 布尔型 (boolean) = 返回真/假; C型报告器 = 代码块容器 + 返回值

事件

程序入口点和事件触发机制。所有程序至少需要一个事件帽子积木来启动。

积木形状说明
🚩 当程序启动时hat点击运行按钮后触发,是最常用的程序入口
⌨ 当按下 [key] 键hat按下指定键盘按键时触发,支持字母/数字/方向键/特殊键
👆 当精灵被点击hat鼠标点击当前精灵时触发
📡 广播 [msg]stack发送消息给所有"当接收到"积木,不等待执行完毕
📡 广播 [msg] 并等待stack发送消息并等待所有接收者执行完毕后再继续
📩 当接收到 [msg]hat接收到指定消息时触发,配合广播使用
⏱ 每隔 [sec] 秒hat定时触发,每隔指定秒数执行一次

运动

精灵移动、方向控制、物理系统(超越 Scratch 的增强运动系统)。

基础移动

积木形状说明
移动 [steps] 步stack沿当前方向前进指定步数
右转 [deg] 度stack顺时针旋转指定角度
左转 [deg] 度stack逆时针旋转指定角度

位置控制

积木形状说明
移到 x:[x] y:[y]stack直接移动到指定坐标
移到随机位置stack移动到舞台内随机位置
移到鼠标位置stack移动到当前鼠标坐标
移到 [sprite] 的位置stack移动到指定精灵的位置
将 x 坐标增加 [dx]stack水平移动
将 x 坐标设为 [x]stack设置绝对 x 坐标
将 y 坐标增加 [dy]stack垂直移动
将 y 坐标设为 [y]stack设置绝对 y 坐标

滑行

积木形状说明
滑行 [sec] 秒到 x:[x] y:[y]stack平滑移动到指定坐标
滑行 [sec] 秒到随机位置stack平滑移动到随机位置
滑行 [sec] 秒到鼠标位置stack平滑移动到鼠标位置
滑行 [sec] 秒到 [sprite]stack平滑移动到指定精灵

方向与反弹

积木形状说明
面向 [deg] 度stack设置面向角度(90=右, 0=上)
面向鼠标stack面向鼠标位置
面向 [sprite]stack面向指定精灵
将方向增加 [ddir] 度stack相对旋转方向
碰到边缘就反弹stack碰到舞台边缘反弹方向
设置旋转模式stack任意旋转 / 左右翻转 / 不旋转

⚡ 物理系统(超越 Scratch)

积木形状说明
设置速度 vx:[vx] vy:[vy]stack设定 x/y 方向速度分量
将速度改变 vx:[vx] vy:[vy]stack增减速度(加速度效果)
以速度 [speed] 向 [deg] 度方向运动stack按速度值和方向设定运动速度
施加摩擦力 [f]stack每帧将速度乘以摩擦系数(0~1),模拟减速
施加重力 [g]stack每帧给 vy 加上重力值,模拟自由落体
按速度移动一步stack根据当前速度更新精灵位置
碰到边缘反弹速度(弹性 [e])stack边缘弹性碰撞,e=1 完全弹性,e<1 有能量损耗

⚡ 追踪与高级运动(超越 Scratch)

积木形状说明
向鼠标移动 [steps] 步stack朝鼠标方向前进
向 [sprite] 移动 [steps] 步stack朝目标精灵方向前进
远离 [sprite] [steps] 步stack远离目标精灵
绕 [sprite] 旋转 [deg] 度(半径 [r])stack围绕目标精灵做圆周运动
随机移动 [min]~[max] 步stack随机方向随机步数移动
随机转向 [min]~[max] 度stack随机角度转向
返回上一步位置stack精灵回到上一次移动前的位置
限制在舞台内stack将精灵坐标钳制到舞台范围
超出舞台从另一侧进入stack穿屏效果(类似贪吃蛇)

报告器(获取运动数据)

积木形状说明
x 坐标 / y 坐标reporter返回精灵当前位置
面向方向reporter返回精灵当前朝向角度
x 速度 / y 速度 / 当前速度reporter返回精灵的速度分量或合成速度
到鼠标的距离 / 方向reporter计算到鼠标的距离和角度
到 [sprite] 的距离 / 方向reporter计算到指定精灵的距离和角度
在舞台边缘?boolean判断精灵是否在舞台边缘

外观

精灵的显示/隐藏、对话气泡、造型切换、大小与特效控制。

积木形状说明
显示 / 隐藏stack显示或隐藏精灵
说 [text] [sec] 秒stack显示对话气泡并等待指定时间后消失
说 [text]stack显示对话气泡(不等待,持续显示)
思考 [text]stack显示思考气泡
下一个造型stack切换到下一个造型(循环)
将大小设为 [size]%stack设置精灵缩放比例
大小增加 [n]stack增加/减少精灵大小
将颜色特效设为 [val]stack设置颜色偏移特效
清除图形特效stack清除所有视觉特效
切换造型为 [name]stack从造型库选择并切换造型
大小reporter返回当前大小百分比

控制

流程控制:循环、条件、等待、克隆、标签跳转、元编程。

基础流程

积木形状说明
等待 [sec] 秒stack暂停执行指定秒数
重复 [times] 次c-block循环执行子代码指定次数
重复执行c-block无限循环执行子代码
如果 [cond] 那么c-block条件为真时执行子代码
如果 [cond] 那么 / 否则c-block条件分支:真走"那么",假走"否则"
重复直到 [cond]c-block循环直到条件为真
停止全部stack停止所有正在运行的脚本
创建自己的克隆stack创建当前精灵的副本
删除此克隆stack删除当前克隆体

标签与 Turbo

积木形状说明
给以下积木贴上标签 [label] 并运行c-block为子代码添加标签,可被 goto 跳转
⚡ 一帧内执行c-block跳过所有等待/延迟,以最快速度执行子代码。适合大规模计算
从代码标签 [label] 开始往后运行stack跳转到指定标签处继续执行(goto)

元编程(v1.0.4 新增)

积木形状说明
代码块c-block-reporter将子代码封装为可传递的"值"。左上角 flow-in 被触发执行,正左中 param-out 输出代码块引用
运行 [🧩]stack接收积木引用并执行。支持代码块闭包、函数定义
运行 [🧩] 并返回reporter执行积木并返回其结果值
元编程示例:
1. 拖出一个"代码块",内部放入子代码
2. 从代码块左侧 param-out 拖线到"运行 [🧩]"的输入槽
3. 运行时,代码块内的子代码会被执行
4. 也可以传给"设置函数 [名称] 定义为 [🧩]"来动态注册函数

运算

数学运算、比较、逻辑、字符串操作和数学函数。

算术与随机

积木形状说明
[a] + [b] / - / × / ÷ / 取余reporter四则运算和取余
[a] 的 [b] 次方reporter幂运算
在 [a] 到 [b] 间随机reporter范围内随机整数
随机小数 (0~1)reporter0 到 1 之间的随机浮点数

比较与逻辑

积木形状说明
[a] < / > / ≤ / ≥ / = / ≠ [b]boolean比较运算符
[a] 且 [b]boolean逻辑与
[a] 或 [b]boolean逻辑或
非 [a]boolean逻辑非

字符串操作

积木形状说明
连接 [a] 和 [b]reporter拼接两个字符串
[s] 的长度reporter返回字符串长度
[s] 从第 [start] 到第 [end] 个字符reporter截取子字符串
[s] 中 [sub] 的位置reporter查找子串位置
[s] 包含 [sub]?boolean判断是否包含
[s] 转大写 / 转小写reporter大小写转换
[s] 去除空格reporter去除首尾空格
[s] 重复 [n] 次reporter重复字符串
[s] 将 [from] 替换为 [to]reporter字符串替换
[s] 的第 [n] 个字符reporter获取指定位置字符
将 [s] 转为数字 / 将 [n] 转为文本reporter类型转换

数学函数

积木形状说明
[fn] [n]reporter数学函数:abs/floor/ceil/round/sqrt/sin/cos/tan/asin/acos/atan/log/log2/exp/sign
[a] 和 [b] 的最小值 / 最大值reporter取最小/最大值
将 [n] 限制在 [min] 到 [max] 之间reporter值钳制(clamp)
从 [a] 到 [b] 插值 [t]reporter线性插值(t=0 返回 a,t=1 返回 b)
π / ereporter数学常数

变量

变量存储与操作。v1.0.4 起,当变量名与函数名相同时获取的是函数引用。

积木形状说明
将 [name] 设为 [val]stack赋值(自动创建变量)
将 [name] 增加 [val]stack数值增加
[name]reporter读取变量值。若变量名与函数名相同,返回函数引用
显示/隐藏变量 [name]stack在舞台上显示/隐藏变量监视器
局部域c-block创建局部作用域,内部变量不会污染外部
v1.0.4 特性:当变量名(如"求平方")恰好是一个已定义的函数名时,读取该变量会返回函数本身的引用。你可以将其传给"运行 [🧩]"来调用,实现函数式编程风格。

函数

函数定义、调用、返回值。支持多参数和动态函数注册。

积木形状说明
定义函数 [name]hat定义函数,支持通过右键添加多个参数。参数名会出现在积木标签中
调用 [name]stack调用已定义的函数,参数槽自动匹配函数定义的参数数量
调用 [name] 的返回值reporter调用函数并获取其返回值
返回 [val]stack从函数中返回指定值,结束函数执行
参数 [name]reporter在函数体内读取参数值
设置函数 [name] 定义为 [🧩]stackv1.0.4 新增:运行时将代码块注册为动态函数,支持扩展参数名
动态函数示例:
① 创建"代码块",内部放入"返回 [x × x]"
② 使用"设置函数 [求平方] (x) 定义为 [代码块]"
③ 之后用"调用 [求平方] (5)"即可调用

类/OOP

面向对象编程:类定义、初始化、方法、属性、对象创建。

积木形状说明
定义类 [name]hat定义一个类的入口
初始化方法 ([args])c-block构造函数,创建对象时自动调用
方法 [name]([args])c-block定义类方法
设置属性 self.[attr] = [val]stack在方法内设置实例属性
[obj].[attr]reporter读取对象属性
创建 [cls] 对象([args])reporter实例化对象,返回对象引用
[obj].[method]([args])stack调用对象方法
[obj].[method]([args]) 返回值reporter调用方法并获取返回值
selfreporter在方法内引用当前实例

列表

列表作为数组存储在变量中,通过变量名引用。

积木形状说明
列表reporter创建空列表,右键可添加初始项
向 [list] 添加 [val]stack在列表末尾追加元素
删除 [list] 第 [idx] 项stack删除指定位置的元素
在 [list] 第 [idx] 位插入 [val]stack在指定位置插入元素
设置 [list][[idx]] = [val]stack修改指定位置的元素
[list][[idx]]reporter获取指定位置的元素
[list] 的长度reporter返回列表元素个数
[list] 包含 [val]boolean判断列表是否包含指定值
清空 [list]stack清空所有元素
遍历 [list] 中每项 [var]c-block遍历列表,每次将当前项赋值给变量
[list] 中 [val] 的位置reporter查找元素首次出现的索引
用 [sep] 连接 [list]reporter将列表用分隔符拼接成字符串
排序 [list] 升序/降序stack原地排序列表
反转 [list]stack原地反转列表

侦测

碰撞检测、鼠标/键盘输入、精灵属性、计时器与系统信息。

碰撞与输入

积木形状说明
碰到边缘?boolean判断是否触碰舞台边缘
碰到 [sprite]?boolean判断是否与指定精灵碰撞
鼠标的 x / 鼠标的 yreporter获取鼠标坐标
鼠标按下?boolean判断鼠标是否按下
按下 [key] 键?boolean判断指定键是否按下
到 [sprite] 的距离reporter计算到指定精灵的距离

精灵属性与时间

积木形状说明
[sprite] 的 x/y 坐标reporter获取指定精灵位置
[sprite] 的方向 / 大小reporter获取精灵方向和大小
计时器 / 计时器归零reporter / stack程序启动以来的秒数 / 重置
回答reporter获取"询问"积木的用户回答
当前 [unit]reporter当前时间(秒/分/时/日/月/年/星期)
用户名reporter获取系统用户名
舞台宽度 / 高度reporter获取舞台尺寸
精灵数量reporter获取当前精灵总数
当前时间戳 (毫秒)reporter获取毫秒级时间戳
格式化时间 [fmt]reporter格式化输出时间,如 yyyy-MM-dd HH:mm:ss

声音

音频加载、播放、停止与音量控制。

积木形状说明
播放声音 [name]stack播放指定声音(不等待结束)
播放声音 [name] 并等待stack播放声音并等待播放完毕
停止所有声音stack停止所有正在播放的声音
停止声音 [name]stack停止指定声音
将音量设为 [vol]%stack设置全局音量(0~100)
音量增加 [val]stack增减音量
音量reporter获取当前音量值
加载声音文件 [path]stack加载外部音频文件

IO

输入输出:打印、询问、文件读写、数据持久化。

积木形状说明
打印 [text]stack在输出面板打印文本
打印换行 [text]stack打印并自动换行
清空输出stack清空输出面板
询问 [q] 并等待stack弹出输入框询问用户
回答reporter获取用户的回答
弹出提示 [msg]stack弹出 alert 对话框
确认 [msg]boolean弹出确认框,返回用户选择
控制台日志 [text]stack输出到开发者控制台(F12)
读取文件 [path]reporter读取本地文件内容(桌面版)
写入文件 [path] 内容 [text]stack写入本地文件(桌面版)
保存数据 [key] = [val]stack持久化保存键值对数据
加载数据 [key]reporter读取之前保存的数据