球球大作战自定义皮肤自动作画
本技能是活文档:每次作画任务完成后回写经验,版本号 minor+1。
⛔ 第零位:自进化第一原则(最高优先级)
这是所有规则之上的铁律,优先级高于一切作画任务。
- 踩坑即记:作画过程中只要犯了错、踩了坑、被用户纠正,当场立刻更新本文档或对应 references/ 文件,不要等用户提醒、不要攒到最后、不要"下次再说"。
- 错误变SOP:记录不能只写"踩了什么坑",必须写成可执行的自检步骤——下次作画前逐条对照检查,从流程上杜绝再犯。
- 规则前置:凡是反复踩的坑、用户多次强调的规则,必须放到本文档最前面(本区域或 §1 之前),不能埋在 references/ 深处。
- 版本同步:每次修改文档,frontmatter
versionminor+1,文末「更新日志」加一行。
✅ 作画前自检 SOP(开画前逐条对照,缺一不可)
每次开始任何一幅画之前,必须过一遍这份清单。这不是建议,是强制流程。
A. 数据准备(必须做)
- 已读三份存储:
qiu-calib(按钮坐标)、qiu-brush-width(三档笔宽)、qiu-board(圆心半径) - 所有坐标用实时存储值计算,不凭记忆、不用文档里的旧数值
B. 执行顺序(铁律,一步不能乱)
- 第1步:清空画板(
qiu-clear-board,杜绝上一幅残留) - 第2步:设背景色(点"背景"→点色板颜色)
- 第3步:设边框色(点"边框"→点色板颜色)
- 第4步:点"画笔"回到画笔模式(否则点色板改的是背景色!)
- 第5步:选色选笔粗,才动笔画主体
C. 画法铁律(画错方法=白画,必须纠正)
- ⛔ 画前必先构图思考,禁止上来就写坐标(用户 2026-09-18 定):
- 开画前先以人类画家视角想清楚以下问题,写下来再下笔:
- 空间层次:远景(天空/远山)→ 中景 → 近景,地平线在哪?各元素在画面上1/3还是下2/3?
- 元素位置关系:A元素和B元素谁在谁前面?谁在谁旁边?物理上不能重叠/穿越的元素必须分开(沙丘不能穿过河、云不能穿过太阳、草不能长在水面上)
- 透视关系:近处元素大、远处元素小;河流近宽远窄;沙丘近大远小
- 完整元素清单:画面上应该有哪些元素?每个元素的颜色、笔粗、大致位置?
- 每个元素的真实外形:画面上每个元素,你先用一句话描述它真实长什么样?它的核心轮廓是什么形状?是隆起的还是扁平的?团状还是线状?
- 禁止想都不想就直接写坐标曲线。如果描述不出来这个东西长什么样,或者描述出来的形状和真实物体不符,就不能下笔
- 禁止用偷懒的简化画法(如"随便画一条线""y稍微上下动一下")代替真实物体的轮廓
- 每画一个元素前,先在脑子里"看"一眼它应该长什么样,再决定怎么画
- 反例(大漠皮肤v3):沙丘画成五条水平香肠线——因为没先想"沙丘长什么样"就直接写了一条水平线
- 自检:写batch前先口头过一遍每个元素"它长什么样、在哪、和谁相邻不冲突",确认无矛盾再生成坐标
- 开画前先以人类画家视角想清楚以下问题,写下来再下笔:
- ⛔ 透视感第一(用户 2026-09-18 定为最重要规则):
- 球球画板本身就是一个圆盘(球体正面投影),所有图案必须服从"画在球面上"的透视逻辑,而不是平面摆花
- 中心大、边缘小、边缘被圆边裁切:正面朝向观众的元素大且完整;靠近圆周的元素必须缩小并被圆盘边界自然切掉一部分(故意把路径画到 r 以外,靠圆形画布裁切),绝不能把多个完整图案均匀平铺在圆盘中央——那是"贴纸拼贴",不是足球/星球/球面图案
- 主色占比要符合真实物体:如足球黑块只占球面 ~12%,白色六边形占主体;图案太满=不像。先算色块占比,再定半径/间距
- 凡是多单元对称图案(足球多面体、花瓣、星球大陆),外圈单元一律推向圆边并裁切,不要全部完整居中
- ⛔ 几何建模先行,禁止凭直觉摆位(用户 2026-09-18 定):
- 凡是带三维体积感的题材(球/多面体/人脸/物体/动物),开画前必须在 PC 端用脚本完成三维投影计算,再下笔,禁止凭对称感/经验直接手摆坐标
- 标准流程:① 建立三维几何模型(写出所有顶点的单位向量坐标);② 选定观察方向并旋转坐标系使视线对准主轴;③ 枚举可见面——面法向量与视线方向点积 > 0 者可见,反之为背面剔除;④ 将可见顶点/面中心正交投影到画板平面,换算成
(cx+k·x, cy+k·y);⑤ 计算各元素投影极角、径向距离、超出圆盘的裁切量 - 计算产物即作画依据:投影得到的极角、径向距离、裁切半径直接代入 batch JSON,不再目测微调;足球 v1 凭感觉摆外围五边形偏了 36° 就是反例
- 纯平面装饰(纯色底 + 无透视的贴纸五官)可豁免;只要题材是"一个有体积的东西",就必须走这一步
- 实心色块用轮廓嵌套填充法,禁止水平直线堆叠!
- 正确:先画外轮廓闭合路径 → 逐圈向内缩约 0.7×笔宽 → 再画下一圈 → 直到填满
- 错误:用多条横线从左到右堆叠填充 → 边缘阶梯锯齿、笔数多、不均匀
- 详见
references/画曲线经验.md「轮廓嵌套填充法」
- ⛔ 轮廓嵌套填充:最内圈半径必须 ≤ 0.4×笔宽(中心露底铁律)
- 笔沿圆周走时,笔的实际覆盖范围只有圆心周围 ±w/2。若最内圈半径 r_last > w/2,圆心周围会漏一个小圆点(真机踩坑:落日中心露黄点,大漠皮肤实证)
- 正确:逐圈缩小直到 r_last ≤ 0.4×w(留余量),即使下一圈半径算出来是负数也要画一个 r≈0.2×w 的小圈把中心盖住
- 自检:画完后心算
r_last <= 0.4*w ?,不满足就多画一圈;禁止因为"下一圈半径算出来是负数"就跳过
- 整圆/闭合路径:points 数组首尾必须重合(最后一点 = 第一点),否则粗笔宽处会漏白
- 一笔一个 gesture:一条曲线/一个笔画 = 一次
path,不要把多笔塞进一个手势 - 曲线密采样:点间距 ≤ 40px 才看不到折角;整圆 ≈ 45+1 点,半圆 ≈ 22 点
D. 批量指令文件坑(qiu-draw-batch 专用)
- JSON 文件必须用无 BOM 的 UTF-8 编码写入!
- PowerShell 的
Out-File -Encoding utf8会加 BOM → 手机端解析报Unexpected token: - 正确写法:
[System.IO.File]::WriteAllText($path, $json, (New-Object System.Text.UTF8Encoding $false))
- PowerShell 的
-
file参数必传,不能留空用默认值——默认读残留旧qiu_batch.json会跑错 - ⛔ 清空画板禁止写在 batch 里(
btn:clear不点确认弹窗)!- batch 里的
btn:clear只点"清空"按钮,不会自动点确认弹窗的"确定" → 弹窗挡住后续 bg/border/选色/path,全部点空或点错位置(真机踩坑:富士山残留透出来) - 正确做法:先在 batch 之外单独跑一次
qiu-clear-board模板(它内部点清空→等弹窗→点确定,回执clicked:["清空","确定"]),确认清空成功后,再上传只含bg→border→tool:brush→color→size→path的 batch 执行 - 即 batch 的 ops 开头不要放 clear,clear 永远在 batch 之外单独做
- batch 里的
1. 触发与定位
- 触发语:用户说"画球球皮肤画XX"、"在球球画板上画XX"、"自定义皮肤画XX"(XX 可以是老虎/美女/小鸟/机甲/黑洞/任何图案)。
- ⛔ 开画前先查沉淀索引:用户说画 XX 时,先看 §6 沉淀作品索引——如果 XX 已有
draw_<xx>.js脚本,直接读对应薄文档复现,不要重新设计坐标;只有索引里没有的新题材才走从零作画流程。 - 沉淀触发:用户说"沉淀"或"存为脚本",宾语是刚画完的那幅画 → 读
references/沉淀SOP.md执行(触发词表见该文档)。 - 本技能不做:不打开 App、不导航到画板页——调用前用户应已停留在画板编辑页;不做支付/上传/分享。
- 核心依赖:
- 手机任务中继(
autojs-mobile-automation技能,端口 9421); - 电脑本地 RapidOCR 服务(端口 8765,必须用它,不用手机内置 OCR)。
- 服务异常时读
references/启动与排障.md。
- 手机任务中继(
2. 数据权威源 = 手机本地存储(本文档零数值)
铁律:文档不保留任何坐标、笔宽、画板几何数值。一切运行期数据实时读手机本地存储(AutoJS storages);读不到就按
references/标定SOP.md重测,绝不凭记忆或文档数值硬点。
作画前必做(读三份存储):
# 工作目录:autojs-mobile-automation 技能目录
# ⚠️ PowerShell 5 会吃掉 JSON 里的双引号,--args 必须用 \" 转义(见 §5 踩坑)
# 1) 全部按钮坐标清单(读 qiu-calib 存储)
node scripts/run-task.js qiu-calib-read --args '{\"op\":\"list\"}'
# 2) 三档笔宽(读 qiu-brush-width 存储,逐键读)
node scripts/run-task.js storage --args '{\"op\":\"get\",\"name\":\"qiu-brush-width\",\"key\":\"thin\"}'
node scripts/run-task.js storage --args '{\"op\":\"get\",\"name\":\"qiu-brush-width\",\"key\":\"medium\"}'
node scripts/run-task.js storage --args '{\"op\":\"get\",\"name\":\"qiu-brush-width\",\"key\":\"thick\"}'
# 3) 画板圆心/半径(读 qiu-board 存储)
node scripts/run-task.js storage --args '{\"op\":\"get\",\"name\":\"qiu-board\",\"key\":\"board\"}'
使用原则:
- 作画前现读三份存储,用返回值算所有坐标与间距;
- 点按一律走
tap-calibrated 名字(内部读qiu-calib存储);未标定会报错 → 按references/标定SOP.md补标定,不要回退硬点; - 安全作画区:以半径
r向内留 1%~5% 余量,避免笔触贴圆边被裁切; - 曲线公式用变量代入圆心:
[cx + R*cosθ, cy + R*sinθ](采样公式见references/画曲线经验.md); - 换机型/分辨率/游戏界面改版:三份数据全部失效 → 按
references/标定SOP.md重测。
⛔ 作画前三步铁律(用户 2026-09-18 定,每次开画必走,缺一不可):
- 先清空画板:
qiu-clear-board(有确认弹窗,走模板一键点清空→确定),杜绝上一幅画残留;- 再设背景色和边框色:按题材选背景(太空/科幻=蓝、夜景=深蓝、雪地/白纸=白等),用
bg一键铺底;边框色也一并设好(与主体配色协调,如红边框),用border;两者都不能漏;- 最后才动笔画主体:铺完背景/边框后必须先点"画笔"回到画笔模式,再选色选笔粗开画。 禁止跳过清空直接铺色开画——旧笔触会透出来毁掉新画;clear 必须在 batch 之外单独用
qiu-clear-board跑(见 §D),batch 的ops开头按此顺序排:bg → border → tool:brush → 选色选笔 → 画主体。
界面功能速记(无坐标版):
- 撤销/重做粒度:一次"按下→画→离开"= 一笔 = 最小撤销单位;一条曲线/一个笔画就发一次
qiu-draw-path调用,不要把多笔塞进一个 gesture; - 画错:优先
tap-calibrated 撤销逐笔回退(点一次等约 0.7s),不要清空重来;整体构图错了才qiu-clear-board; - 背景/边框:两个"整圆一键着色"开关——点"背景"→点色板颜色 = 整个圆内铺满该色;点"边框"→点色板颜色 = 圆环边框变色。需要底色一键铺底,不要用粗笔来回涂;
- ⚠️ 铺完背景必须先点"画笔"回到画笔模式,再选画笔颜色,否则点色板改的是背景色;
- 画笔/橡皮擦:共用同一组三档笔粗;
- 清空:有确认弹窗(清空→确定二段点击),一律用
qiu-clear-board模板; - 生成皮肤:禁止点击
生成皮肤按钮。
3. 手机任务模板表(autojs-mobile-automation 技能下)
| 模板名 | 作用 | 关键参数 |
|---|---|---|
pc-ocr | 截屏→上传电脑 OCR→返回全文+每个文字块中心坐标 | query(选填关键词过滤)、minScore(默认0.85) |
qiu-board-view | 作画自检专用:只截中间大圆区域并回传电脑 PNG,无参,直接 Read 看图;自动忽略左右工具栏 | name(选填文件名) |
qiu-clear-board | 一键清空画板(点清空→等弹窗→点确定) | waitMs(默认1000) |
qiu-draw-path | 画曲线/路径(封装 gesture,多点连续) | duration(毫秒)、points([[x,y],...]) |
qiu-draw-batch | 读手机上的指令 JSON 批量作画(选色/笔粗/工具/多条曲线一次下发),PC 端只传文件、命令行零转义 | file(必传,默认读残留旧 qiu_batch.json 会跑错,见踩坑记录 2) |
tap-point | 点屏幕坐标 | x, y |
tap-calibrated | 按名点按画板控件:读 qiu-calib 标定坐标后 tap;未标定或屏幕方向不符报错 | name |
wait | 等待 | ms |
qiu-calib | 坐标标定双悬浮窗:红色环形准星可拖动 + 按钮名单分页面板,坐标按名存 qiu-calib。长任务:--wait 0 | 无 |
qiu-calib-read | 读标定结果:{"op":"list"} 列出全部已标定坐标 | op(选填) |
qiu-board-measure | 画板绘制区域精确测量双悬浮窗:全屏 1px 红圆环叠加画板,对齐后「保存」写存储 qiu-board(键 board) | cx/cy/r/step(选填初始值) |
qiu-brush-width-measure | 画笔三档粗细精确测量双悬浮窗:两根1px红水平线夹住画笔横线,分别保存三档笔宽(px)到 qiu-brush-width。长任务:--wait 0 | topY/bottomY/step(选填初始值) |
测量模板的完整用法与登记:见 references/标定SOP.md。
调用方式:
cd <autojs-mobile-automation 技能目录>
node scripts/run-task.js <模板名> --args '<json>'
4. 自进化规则
每次完成一次作画任务后,回写经验:
- 坐标永远不回写文档(权威源是手机存储,见 §2);
- 画出新形状(圆/椭圆/三角/眼睛/嘴型)→ 采样公式追加到
references/画曲线经验.md; - 新配色方案 → 追加到
references/配色库.md(只写颜色名与用途,不写坐标); - 踩坑 → 追加到
references/踩坑记录.md(不存在则创建,顶部加『何时读我』); - frontmatter
versionminor+1,文末「更新日志」加一行。
不要在多轮对话里"记住"——全写进文件,下个会话读它就能恢复上下文。
5. 沉淀铁律(用户指定 2026-09-18)
完整沉淀 SOP(触发词表/6 步流程/薄文档 8 项)见
references/沉淀SOP.md。此处只留触发判定与两条铁律。
- 触发:用户说「沉淀」或「存为脚本」且宾语是刚画完的画 → 立刻执行沉淀 SOP,不二次确认;
- ⛔ 铁律一(脚本只执行不读入):
draw_<题材>.js通常 20KB+,禁止 Read/cat/grep 整篇读入上下文——读薄文档 → 拼命令 → 下发执行 → 只读回执 JSON;唯一例外:改造型走生成器/Patch 路线,或Read的offset/limit定点读取; - ⛔ 铁律二(薄文档自足):
references/<题材>.md≤ 30 行、固定 8 项,必须自足到"不读脚本也能正确调用"。
6. 路由表(按需读取)
| 场景 | 读什么 |
|---|---|
| 服务异常 / 需要启动中继或 OCR / 防火墙 | references/启动与排障.md |
| 异常排查 / 画错 / 断线 / OCR 识别不到 | references/踩坑记录.md |
| 作画规划:算曲线采样、选笔档、画细线 | references/画曲线经验.md |
| 换机型 / 数据缺失 / 未标定报错 | references/标定SOP.md |
| 用户说「沉淀 / 存为脚本」 | references/沉淀SOP.md |
| 画某题材需配色 / 画法参考 | references/配色库.md |
| 构图 / 配色 / 笔触 / 形状等美术指导 | references/绘画技法参考.md |
| 复现已沉淀作品(老虎) | references/TIGER.md(接口卡) |
| 复现已沉淀作品(足球) | references/FOOTBALL.md(接口卡) |
| 复现已沉淀作品(太阳系) | references/SOLAR.md(接口卡) |
沉淀作品索引:scripts/draw_tiger.js(7 stage / 42 笔)、scripts/draw_football.js(3 stage / 13 笔,归一化坐标,运行时查存储)、scripts/draw_solar.js(7 stage / 31 笔,归一化坐标,运行时查存储);新题材沉淀后薄文档自动成为本表条目。
更新日志
-
0.0.44:后羿射日皮肤实机完成(10 太阳两排交错 + Q版后羿持弓射日,7 色 6 批 36 笔)——踩坑记录新增「粗笔视觉半径=R+40.5,多圆同排间距不足粘成云团,须 ≥R1+R2+81+8 或改两排交错」;配色库新增「后羿射日」配色方案(含箭尖触日=算目标圆进入点经验)。
-
0.0.43:太阳系皮肤沉淀为脚本
scripts/draw_solar.js(7 stage / 31 笔,归一化坐标,949 点还原最大误差 0.5px,dryRun missing=[],真机逐 stage 0→6 完整复现一轮 ok:1);薄文档references/SOLAR.md;生成链_src/solar/(gen/build/verify);预览图outputs/solar.png。 -
0.0.42:太阳系皮肤实机完成(太阳+6行星+土星环/木星条纹/地球斑块,7 色,7 批 31 笔)——配色写入配色库;踩坑记录新增「主体色与背景同色=隐形」(地球蓝色画在蓝色背景上只剩绿斑,需补白点云朵+绿斑点缀)。
-
0.0.41:第5问「物体真实外形」改为通用规则——不针对具体山丘/云/树,而是通用要求:画任何元素前先想清楚它真实长什么样,禁止用偷懒简化画法代替真实轮廓。
-
0.0.40:⛔「画前必先构图思考」新增第5问「物体轮廓特征」——山丘是向上拱起的∩形不是水平横线,云是团状不是直线,树有干有冠不是一个点。禁止用"一条线上的轻微y波动"代替立体物体。反例:大漠v3沙丘画成五条水平香肠。
-
0.0.39:⛔ 新增「画前必先构图思考」铁律——开画前必须先想清楚空间层次、元素位置关系(不能穿越/重叠)、透视关系、完整元素清单,写下来再下笔。反例:大漠v2沙丘横穿河道、晚霞穿落日。
-
0.0.38:⛔ 新增「中心露底铁律」——轮廓嵌套填充时最内圈半径必须 ≤ 0.4×笔宽,否则圆心周围漏一个小圆点(真机踩坑:落日中心露黄点,大漠皮肤实证;根因:笔沿圆周走只覆盖 ±w/2,r_last > w/2 时圆心露底)。即使下一圈半径算成负数也要补一个小圈盖中心,禁止跳过。
-
0.0.37:足球沉淀为脚本
scripts/draw_football.js(3 stage / 13 笔,归一化坐标,dryRun 通过 missing=[]);薄文档references/FOOTBALL.md;生成器归档_src/football/;预览图outputs/football.png。 -
0.0.36:⛔ 新增「几何建模先行,禁止凭直觉摆位」——凡带三维体积感的题材,开画前必须在 PC 端完成三维投影计算(建模→选视线→背面剔除→正交投影→裁切量),计算结果直接作 batch 坐标;足球 v1 凭感觉摆位偏 36° 是反例(用户 2026-09-18 定)。
-
0.0.35:⛔ 「透视感」定为最高美术铁律(用户 2026-09-18 定)——画板=圆盘=球面投影,中心大且完整、边缘小且被圆边自然裁切(故意画到 r 外靠画布切),色块占比符合真实物体(足球黑块~12%),禁止多单元完整平铺居中(足球第一版被批"像花不像球"的实证教训)。
-
0.0.34:⛔ batch 里禁止写
btn:clear——它只点"清空"按钮不点确认弹窗的"确定",弹窗挡住后续 bg/border/选色/path 全部点空(真机踩坑:富士山作画残留透出来)。清空一律在 batch 之外单独跑qiu-clear-board模板;§D 新增自检条,§2 末尾顺序指引同步修正(用户 2026-09-18 定)。 -
0.0.33:
画曲线经验.md新增「三角形/锥形的轮廓嵌套填充」——三角形比圆形需要更多圈(5~6圈)才能填满中心,否则露底(富士山作画实证)。 -
0.0.32:新增「第零位:自进化第一原则」(最高优先级,踩坑即记、错误变SOP、规则前置)+ 「作画前自检 SOP」(A数据/B顺序/C画法/D批量文件坑 四大类,开画前逐条对照)——把"禁止直线堆叠必须用轮廓嵌套填充法"、"JSON无BOM编码"这两个反复踩的坑前置为强制流程(用户 2026-09-18 定)。
-
0.0.31:⚠️ qiu-draw-batch 的
file参数标为必传——默认读残留旧qiu_batch.json会跑错(真机踩到,见踩坑记录 2)。 -
0.0.30:新增「作画前三步铁律」——开画必走 清空→设背景色→回画笔模式才动笔画;批量 ops 开头按此排序(用户 2026-09-18 定)。
-
0.0.29:
references/绘画技法参考.md新增 §13「前后遮挡与立体感」——遮挡关系=绘制顺序、弧线端点处理、倾斜圆盘可见面逻辑、无渐变远近表现。 -
0.0.28:按「按需加载」重构——SKILL.md 瘦身为核心卡+路由表,细节拆分至 references/(启动与排障 / 画曲线经验 / 标定SOP / 沉淀SOP / 配色库)。能力与触发词零变更。
-
(更早历史版本见 git 或旧文档)