Objector v1.0.4 完整参考手册 — 涵盖编辑器操作、12 大积木模块、100+ 积木的详细用法说明
Objector 是一款基于 Electron 的图形化积木编程桌面编辑器,支持 Windows 平台。
按分类浏览所有积木。点击分类名切换显示,将积木拖入画布即可使用。积木间通过端口自动吸附连接。
主要的编程区域。拖拽积木组合成程序。支持滚轮缩放、右键菜单(复制/删除/折叠/批注/Ctrl+T 跳转标签)。
精灵活动的可视化区域。运行程序后精灵在此显示和移动。支持多精灵管理。
工具栏提供 ▶ 运行 / ⏹ 停止 按钮。运行后所有 🚩"当程序启动时" 积木链开始执行。
切换到开发者模式可启用断点设置、单步执行、变量监视面板等高级调试工具。
新建项目时选择父文件夹,自动在其下创建"我的作品"子目录。支持项目重命名(同步更新磁盘目录名)。导出为 HTML 可分享给他人运行。
通过 JSON/JS 扩展文件自定义新积木类型。点击工具栏 📖 文档按钮可查看扩展编写指南。
新手模式:精简积木;普通模式:完整功能;开发者模式:调试工具。
程序入口点和事件触发机制。所有程序至少需要一个事件帽子积木来启动。
| 积木 | 形状 | 说明 |
|---|---|---|
| 🚩 当程序启动时 | 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 | 任意旋转 / 左右翻转 / 不旋转 |
| 积木 | 形状 | 说明 |
|---|---|---|
| 设置速度 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 有能量损耗 |
| 积木 | 形状 | 说明 |
|---|---|---|
| 向鼠标移动 [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 | 删除当前克隆体 |
| 积木 | 形状 | 说明 |
|---|---|---|
| 给以下积木贴上标签 [label] 并运行 | c-block | 为子代码添加标签,可被 goto 跳转 |
| ⚡ 一帧内执行 | c-block | 跳过所有等待/延迟,以最快速度执行子代码。适合大规模计算 |
| 从代码标签 [label] 开始往后运行 | stack | 跳转到指定标签处继续执行(goto) |
| 积木 | 形状 | 说明 |
|---|---|---|
| 代码块 | c-block-reporter | 将子代码封装为可传递的"值"。左上角 flow-in 被触发执行,正左中 param-out 输出代码块引用 |
| 运行 [🧩] | stack | 接收积木引用并执行。支持代码块闭包、函数定义 |
| 运行 [🧩] 并返回 | reporter | 执行积木并返回其结果值 |
数学运算、比较、逻辑、字符串操作和数学函数。
| 积木 | 形状 | 说明 |
|---|---|---|
| [a] + [b] / - / × / ÷ / 取余 | reporter | 四则运算和取余 |
| [a] 的 [b] 次方 | reporter | 幂运算 |
| 在 [a] 到 [b] 间随机 | reporter | 范围内随机整数 |
| 随机小数 (0~1) | reporter | 0 到 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) |
| π / e | reporter | 数学常数 |
变量存储与操作。v1.0.4 起,当变量名与函数名相同时获取的是函数引用。
| 积木 | 形状 | 说明 |
|---|---|---|
| 将 [name] 设为 [val] | stack | 赋值(自动创建变量) |
| 将 [name] 增加 [val] | stack | 数值增加 |
| [name] | reporter | 读取变量值。若变量名与函数名相同,返回函数引用 |
| 显示/隐藏变量 [name] | stack | 在舞台上显示/隐藏变量监视器 |
| 局部域 | c-block | 创建局部作用域,内部变量不会污染外部 |
函数定义、调用、返回值。支持多参数和动态函数注册。
| 积木 | 形状 | 说明 |
|---|---|---|
| 定义函数 [name] | hat | 定义函数,支持通过右键添加多个参数。参数名会出现在积木标签中 |
| 调用 [name] | stack | 调用已定义的函数,参数槽自动匹配函数定义的参数数量 |
| 调用 [name] 的返回值 | reporter | 调用函数并获取其返回值 |
| 返回 [val] | stack | 从函数中返回指定值,结束函数执行 |
| 参数 [name] | reporter | 在函数体内读取参数值 |
| 设置函数 [name] 定义为 [🧩] | stack | v1.0.4 新增:运行时将代码块注册为动态函数,支持扩展参数名 |
面向对象编程:类定义、初始化、方法、属性、对象创建。
| 积木 | 形状 | 说明 |
|---|---|---|
| 定义类 [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 | 调用方法并获取返回值 |
| self | reporter | 在方法内引用当前实例 |
列表作为数组存储在变量中,通过变量名引用。
| 积木 | 形状 | 说明 |
|---|---|---|
| 列表 | 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 / 鼠标的 y | reporter | 获取鼠标坐标 |
| 鼠标按下? | 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 | 加载外部音频文件 |
输入输出:打印、询问、文件读写、数据持久化。
| 积木 | 形状 | 说明 |
|---|---|---|
| 打印 [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 | 读取之前保存的数据 |