一套专为 LayaAir IDE 文档编写设计的自动化工具,支持 CDP 截图、元素查找、鼠标操作、原生菜单交互、GIF 录制。
- Node.js >= 16.0.0
- Windows 10/11(依赖 PowerShell 和 Windows UI Automation)
- LayaAir IDE 启动时添加
--remote-debugging-port=9222参数
cd tools
npm install确保 LayaAir IDE 以远程调试模式启动:
# 方法1:修改快捷方式
# 在 IDE 快捷方式目标末尾添加:--remote-debugging-port=9222
# 方法2:命令行启动
"C:\path\to\LayaAir.exe" --remote-debugging-port=9222node s.js find "Scene2D"如果能看到 Scene2D 的位置信息,说明连接成功。
# CDP 全页截图(不含原生菜单)
node s.js shot output.png
# 裁剪区域
node s.js shot output.png --clip 0,400,200,120
# 裁剪 + 红框标注
node s.js shot output.png --clip 0,400,200,120 --mark 50,10,80,20
# 窗口截图(含原生菜单)
node s.js win output.png
# 窗口截图 + 标注
node s.js win output.png --mark 100,200,80,20# 查找任意文本元素
node s.js find "增加组件"
# 只在层级面板中查找
node s.js find "Player" --hierarchy
# 模糊匹配
node s.js find "Dodge" --partial# 左键点击
node s.js click "Player"
# 右键点击
node s.js rclick "Scene2D"# 列出所有菜单栏按钮
node s.js menubar
# 查找特定按钮
node s.js menubar "工具"
# 点击菜单栏按钮
node s.js menubar-click "工具"# 列出当前可见的菜单项
node s.js menu
# 查找特定菜单项
node s.js menu "2D精灵"
# 点击菜单项
node s.js menu-click "2D精灵"
# 右键 → 菜单出现 → 标注截图 → 关闭菜单
node s.js rclick-menu "Scene2D" "创建2D精灵节点" output.png# 执行 JS 表达式
node s.js game eval "Laya.stage.width"
# 游戏画面截图
node s.js game shot output.png
# 打印节点树
node s.js game tree
# 点击游戏画布
node s.js game click 667,340# 录制游戏动图(自动捕获+编码)
node s.js gif output.gif --frames 60 --fps 15
# 从游戏 target 录制
node s.js gif output.gif --game --frames 45
# 裁剪区域录制
node s.js gif output.gif --crop 0,0,800,600 --fps 20tools/
├── s.js # 主入口(统一命令)
├── make_gif.js # GIF 录制引擎
├── config.json # 配置文件
├── package.json # 依赖管理
├── README.md # 本文档
├── install.bat # 一键安装脚本
│
└── *.ps1 # PowerShell 底层脚本
├── get_menubar.ps1 # 获取菜单栏按钮
├── find_menu.ps1 # 查找原生菜单项
├── fullscreen.ps1 # 全屏截图
└── get_win_rect.ps1 # 获取窗口位置
- 确认 IDE 启动参数包含
--remote-debugging-port=9222 - 在浏览器访问
http://127.0.0.1:9222/json看是否有 targets - 检查端口是否被占用
- 使用
--partial进行模糊匹配 - 使用
--hierarchy限定层级面板 - 先用
node s.js find "xxx"查看所有匹配结果
- 确认 IDE 窗口标题包含默认名称 "aidoc" 或修改脚本中的
$windowName - 确认菜单已展开(菜单栏需先点击,原生菜单需先右键)
- 检查 Windows 显示缩放是否为 100%
# 1. 查找位置
node s.js find "增加组件"
# 2. 截图 + 标注
node s.js shot output.png --mark 1250,30,120,35# 1. 点击菜单栏按钮
node s.js menubar-click "工具"
# 2. 点击子菜单项
node s.js menu-click "制作图集"
# 3. 等待面板打开后截图
node s.js win output.png# 自动:连续捕获帧 → ffmpeg 编码 → 输出 GIF
node s.js gif gameplay.gif --frames 45 --fps 15编辑 config.json 修改默认参数:
{
"cdpPort": 9222,
"defaultTarget": "sceneEditor",
"annotateColor": "#FF2020",
"annotatePad": 8
}const { CDP, annotate, getWindowRect } = require('./s.js');
// 连接 CDP
const cdp = await CDP.connect('sceneEditor');
// 执行表达式
const width = await cdp.eval('Laya.stage.width');
// 截图
const buf = await cdp.screenshot();在 s.js 中添加:
// 1. 定义命令函数
async function cmdMyCommand(args) {
const param = args._[1];
// ...你的逻辑
}
// 2. 在 main() switch 中注册
case 'my-command': return cmdMyCommand(args);
// 3. 更新使用说明| 依赖 | 用途 |
|---|---|
| ws | CDP WebSocket 连接 |
| sharp | 图片处理(裁剪、标注、格式转换) |
| @nut-tree/nut-js | 真实鼠标控制(点击、拖拽) |
- 在
tools/目录创建.ps1文件 - 使用
runPS()调用:
function runPS(script, args = '') {
const ps = path.join(__dirname, script);
return execSync(`cmd /c "chcp 65001 >nul && powershell -NoProfile -ExecutionPolicy Bypass -File "${ps}" ${args}"`,
{ encoding: 'utf8', timeout: 8000 }).trim();
}
// 调用
const result = runPS('my_script.ps1', '-param "value"');// 连接自定义 target
const cdp = await CDP.connect('myTarget');- IDE 版本:工具在 LayaAir 3.4+ 上测试通过
- 屏幕缩放:Windows 显示缩放建议设为 100%
- 多显示器:IDE 需在主显示器上运行
- 游戏 target:游戏预览窗口标题需包含 "game.html"
- 新增菜单栏按钮操作(menubar、menubar-click)
- 新增 GIF 录制命令(gif)
- 优化工具结构,删除冗余文件
- 统一 PowerShell 脚本调用方式
- 初始版本
- 统一 s.js 命令入口
- 支持 CDP 截图、窗口截图、元素查找、鼠标操作
- 原生菜单交互支持
- 游戏操作支持