2.7 KiB
作物阶段位置校准
历史试验:本页人工锚点方案已被
15-crop-position-formula.md的统一定位规则取代。 后续绘制使用统一公式;以下保留为试验记录,不再扩展。
本轮范围
只校准现有本地草莓素材的种子、发芽、小叶、大叶、开花、成熟阶段。 其他作物和通用枯萎图保持原定位;没有自动套用草莓的数据。 不改旧版参考素材,不裁透明留白,不保存网页作物 ID。
参考点与证据边界
采用本地美术基准:茎与地面相接处;种子使用种子簇的落地点。 这是一组人工观察后的本地标注,并非 QQ 网页原始 pivot 的复原结果。 低分辨率边缘存在约 1~2 个原始像素的人工标注误差, 后续可以在同一配置中微调,不能宣称已核验所有作物。
坐标原点是完整参考画布的左上角,x 向右,y 向下。
reference_size 是标注时的画布宽高,anchor 是其内部落地坐标。
数字均为本地参考画布像素,不是屏幕坐标。
| 本地阶段 | 参考画布 | 落地锚点 |
|---|---|---|
| 0 种子 | 35 × 58 | 17, 20 |
| 1 发芽 | 32 × 81 | 19, 27 |
| 2 小叶 | 61 × 99 | 33, 44 |
| 3 大叶 | 102 × 121 | 58, 72 |
| 4 开花 | 107 × 129 | 62, 75 |
| 5 成熟 | 112 × 139 | 64, 78 |
种子图原始文件较大,参考画布采用当前运行时的 35 × 58 显示尺寸。 其他阶段采用原始 PNG 尺寸;全部保留透明区域。
拼接公式
地面目标点 = 地块中心 + 原有作物级 offsetX/offsetY
目标锚点 = anchor × 实际绘制图片尺寸 / reference_size
图片左上角 = 地面目标点 − 目标锚点
先缩放图片,再按实际宽高换算锚点,避免不同分辨率取整累计漂移。 普通和高清图采用同一参考坐标,不再分别维护偏移。
配置与发布
源配置:src/farm_render/data/crop_positions.json。
每个阶段保存 sprite、reference_size、anchor、图片 sha256。
basis 说明人工标注依据。
导出脚本将标注写入渲染 metadata,并检查图片哈希、阶段和画布尺寸。
更换素材或改变种子尺寸后必须重新标注,不能静默套用旧锚点。
这些是绘图数据,保存在包内配置;不需要修改玩家 SQLite 结构。
复现对照图:
python scripts/preview_crop_positions.py --output <输出目录>
图中红十字为地块目标点;阶段 0~5 在相同地块和相同缩放比例下比较。 预览同时给出旧居中算法与新落地锚点算法,观察茎根而非叶片或果实边缘。 自动测试校验跨阶段、跨分辨率的坐标变换;美术位置还需结合预览检查。