hy-farm/docs/godot-migration-progress.md
2026-05-29 19:54:56 +08:00

23 KiB
Raw Permalink Blame History

Godot 重构进度

已完成

  • 删除旧 Unity 目录:unity
  • 安装 Godot 4.6.2 stable 到:/Users/hy/Applications/Godot.app
  • 添加命令行入口:/Users/hy/.local/bin/godot
  • 安装 Godot 4.6.2 官方导出模板到用户模板目录。
  • 新建 Godot 工程:godot/FarmGodot
  • 添加并验证 Web 导出预设:export_presets.cfg
  • 拷贝登录页第一批 Egret 素材:
    • login_bg.jpg
    • login_bg.png
    • login_db.png
    • login_phone.png
    • login_pwd.png
    • login_jizhuPassword.png
    • login_regist.png
    • login_findpwd.png
    • login_goubg.png
    • login_gou.png
    • select_db.png
    • select_db1.png
    • common.pngc_btn1_png
    • huakang.ttf
    • huakanghaibao.ttf
  • 拷贝资源规格:
    • default.res.json
    • default.thm.json
    • LoginSceneSkin.exml
  • 已按新版解密 HTML 完整同步原版素材:
    • 来源:muchang/home/web/game/resource/
    • 目标:godot/FarmGodot/assets/egret/
    • 保留原版相对路径:assets/config/fonts/skins/、根目录资源清单。
    • 原版 resource 下 882 个文件已同步;rsync -ani --inplace --omit-dir-times 复查无待同步文件。
  • 添加第一版场景:
    • scenes/bootstrap.tscn
    • scenes/ui/login_scene.tscn
  • 添加第一版脚本:
    • scripts/bootstrap.gd
    • scripts/services/api_client.gd
    • scripts/core/egret_resource_catalog.gd
    • scripts/core/number_formatter.gd
    • scripts/ui/login_scene.gd
  • 已完成验证:
    • Godot 工程导入通过。
    • 所有 GDScript --check-only 通过。
    • 主场景 headless 启动通过。
    • Web release 导出通过。
    • 本地 HTTP 服务访问 index.htmlindex.wasmindex.pck 均返回 200。
    • Godot --write-movie 录帧成功,登录页可渲染,截图路径:/tmp/farmgodot_frame00000000.png
  • 根据“UI 完全一致”要求,当前登录页只算预览版,不计入 UI 完成。
  • 已处理第一批明显不一致:
    • 输入框去除 Godot 默认黑色样式,改为白鹭输入框底图和 NinePatchRect 承载。
    • 登录按钮改为 common.pngc_btn1_png 图集区域作为底图。
    • 登录页坐标改以运行时 default.thm_4ef35e2b.js 编译皮肤为准,源 EXML 只作为辅助。
    • Web 导出改用自定义 shell当前 Godot 预览按 640 x 960 全画布验证,避免桌面预览右侧黑边。
    • 已生成白鹭/Godot 对照截图和差异图:
      • docs/ui-baseline/egret-login-page.png
      • docs/ui-baseline/godot-login-page.png
      • docs/ui-baseline/login-page-diff.png
      • docs/ui-baseline/egret-login-canvas.png
      • docs/ui-baseline/godot-login-canvas.png
      • docs/ui-baseline/login-canvas-diff.png
    • 当前截图对比结果:
      • 页面截图:11206 / 614400 像素不同,差异率 0.018239
      • 实际 canvas11206 / 460800 像素不同,差异率 0.024319
      • 差异主要集中在中文字体渲染、按钮文字和少量贴图边缘采样;因此登录页仍不能标记为 UI 完成。

当前能力

  • Godot 启动后进入登录页预览。
  • 能解析 Egret default.res.json 并统计资源数量。
  • 登录表单能做账号和密码非空校验。
  • 已配置本地后端地址:http://127.0.0.1:18082/index.php?r=
  • 已配置登录路径:user/login
  • 登录请求已按旧 Egret 协议发送:application/x-www-form-urlencodedbody 为 msg=<base64(JSON)>
  • 登录响应中的 data 已按旧客户端逻辑做 Base64 + JSON 解码。
  • 使用账号 13800000001 / 123456 已验证 Godot Web 版可真实登录并进入主农场。
  • 第一版主农场已接入:
    • 顶部玩家信息栏、头像、经验条、金币、钻石、战力。
    • 农场背景、房屋、围栏、狗屋。
    • 12 块土地显示,已开垦/未开垦状态和扩建入口。
    • 左侧活动入口、世界入口、右下家园入口。
    • 按后端 landList 渲染作物阶段,当前可显示成熟作物和种子期作物。
    • 点击空地后显示旧版黄色土地高亮和圆形“播种”菜单。
    • 点击“播种”后显示旧版右侧种子包,种子列表从 store-house 读取。
    • 点击种子后调用 farm/sow-seeds,成功后刷新当前地块作物。
    • 种子播下后会按 crop_gather_time 和作物阶段时间自动刷新作物贴图,不需要刷新页面。
    • 点击成长中土地后显示旧版圆形土地菜单:铲除、施肥、除虫、除草。
    • 点击成熟土地后显示旧版“收割”菜单,并调用 farm/gather-crop
    • 点击已收割或枯萎土地后显示旧版“铲除”菜单,并调用 farm/clear-land
    • 点击“施肥”后显示旧版右侧化肥包,化肥列表从 store-house 读取,并调用 farm/fertilize
    • 点击“除虫”“除草”后调用 farm/disease,分别传原版疾病类型 12
    • 土地异常状态已渲染原版 plant_state1/2/3 图标。
    • 土地倒计时已按原版长按行为显示,不占用普通点击操作菜单。
  • 家园菜单已补第一版二级入口和弹窗:
    • 点击家园后按旧版弧形弹出商店、仓库、好友入口。
    • 商店弹窗已按 ShopSkin.exmlShopItemSkin.exml 迁移第一版,配置来自 store_list,买入调用 store/buy
    • 仓库弹窗已按 WareHouseSkin.exmlWareHouseItemSkin.exml 迁移第一版,库存来自 store-house,出售弹窗按 SellSkin.exml 迁移,出售调用 store-house/sell
    • 好友弹窗已按 FriendSkin.exmlFriendRankItemSkin.exml 迁移第一版,全国排行调用 comm/get-level-ranking,好友排行调用 friend/friend-list
  • 已生成主农场白鹭/Godot 对照截图:
    • docs/ui-baseline/egret-main-page.png
    • docs/ui-baseline/egret-main-canvas.png
    • docs/ui-baseline/egret-main-meta.json
    • docs/ui-baseline/godot-main-page.png
    • docs/ui-baseline/godot-main-canvas.png
    • docs/ui-baseline/godot-main-meta.json
  • 已生成种菜流程截图:
    • docs/ui-baseline/egret-plant-menu.png
    • docs/ui-baseline/egret-seed-bag.png
    • docs/ui-baseline/egret-after-sow.png
    • docs/ui-baseline/godot-plant-menu.png
    • docs/ui-baseline/godot-seed-bag.png
    • docs/ui-baseline/godot-after-sow.png
    • docs/ui-baseline/godot-plant-flow-meta.json
    • docs/ui-baseline/godot-auto-mature.png
    • docs/ui-baseline/godot-auto-mature-menu.png
  • 已生成土地操作流程截图:
    • docs/ui-baseline/godot-actions-main.png
    • docs/ui-baseline/godot-countdown-longpress.png
    • docs/ui-baseline/godot-actions-menu.png
    • docs/ui-baseline/godot-after-bug-clean.png
    • docs/ui-baseline/godot-after-grass-clean.png
    • docs/ui-baseline/godot-fertilizer-bag.png
    • docs/ui-baseline/godot-after-fertilize.png
    • docs/ui-baseline/godot-ripe-menu.png
    • docs/ui-baseline/godot-after-harvest.png
    • docs/ui-baseline/godot-after-clear.png
    • docs/ui-baseline/godot-land-actions-flow-meta.json
  • 已生成家园菜单弹窗验证截图:
    • docs/ui-baseline/godot-shop-panel.png
    • docs/ui-baseline/godot-warehouse-panel.png
    • docs/ui-baseline/godot-friend-panel.png
  • 已生成狗窝、房屋升级、土地扩建验证截图:
    • docs/ui-baseline/godot-dog-building-extend-main.png
    • docs/ui-baseline/godot-building-upgrade-panel.png
    • docs/ui-baseline/godot-dog-panel.png
    • docs/ui-baseline/godot-dog-food-popup.png
    • docs/ui-baseline/godot-land-extend-panel.png
    • docs/ui-baseline/godot-dog-building-extend-meta.json
  • 已生成宠物功能验证截图:
    • docs/ui-baseline/godot-pet-main.png
    • docs/ui-baseline/godot-pet-panel.png
    • docs/ui-baseline/godot-pet-doghouse-click.png
  • 已生成统一面板背景验证截图:
    • docs/ui-baseline/godot-panel-background-home-menu.png
    • docs/ui-baseline/godot-panel-background-shop.png
    • docs/ui-baseline/godot-panel-background-warehouse.png
    • docs/ui-baseline/godot-panel-background-friend.png
    • docs/ui-baseline/godot-panel-background-pet.png
    • docs/ui-baseline/godot-panel-background-dog.png

未完成

  • 登录成功后的玩家模型已开始拆到 PlayerState/FarmState/InventoryState,但 UI 层仍有部分直接读写字典的旧逻辑。
  • 主场景入口点击、扩建、浇水、土地升级已接第一版;浇水走 farm/disease type=0,当前账号没有干旱土地时只做规则/API 链路验证。
  • 好友搜索、好友申请、查看好友家园、互动动作只保留入口提示,未接完整二级弹窗和接口。
  • Egret 图集自动转 AtlasTexture 未实现。
  • EXML 辅助转换工具未实现。
  • 字体、FNT、音频原始文件已迁入 assets/egret,但部分运行时解析和播放逻辑仍未接完。
  • 登录页已完成第一轮白鹭基准截图对比,但像素差异未归零,不能标记为 UI 完成。
  • 主农场已完成第一版浏览器截图对照,但未做像素差异归零;左侧入口、顶部字体/FNT、围栏招牌语言仍需继续精调。
  • 字体、字号、按钮文字效果、图集采样和旧 H5 的 640x1136 缩放差异仍需继续精调。

已解决问题记录

  • Web 导出第一次失败Godot CLI 只显示空的 configuration errors。
  • 查 Godot 4.6.2 官方源码后确认原因:vram_texture_compression/for_mobile=true 时要求项目启用 ETC2/ASTC 导入设置;当前项目没有启用,can_export 返回失败但没有错误文本。
  • 已按官方 Web exporter 默认值改为 vram_texture_compression/for_mobile=false,重新导出通过。
  • 后端 URL 已从旧客户端 GameConfig.SERVER_PATH 定位:
    • muchang/farmer/js/main.min_77d7299f.js 使用 http://<host>/home/web/index.php?r=
    • 本地 Docker home 服务映射到 127.0.0.1:18082,所以 Godot 使用 http://127.0.0.1:18082/index.php?r=
    • 已用 curl 验证 user/login 可达,并返回后端 JSON 业务状态。
  • 种菜链路已按旧客户端确认:
    • 旧客户端 BagPanelSkin.exml 的右侧种子包位置和 BagIconSkin.exml 的种子图标样式已迁移。
    • 旧客户端 GameView.clickLand -> CoolMenuItem.plant -> OPEN_BAG -> BagIconRender -> farm/sow-seeds 链路已在 Godot 复刻第一版。
    • 2026-05-11 使用 13800000001 / 123456 在 Godot Web 验证:user/loginstore-housefarm/sow-seeds 均返回 HTTP 200。
    • 为验证播种,临时通过 store/buy 买入 1 个金桔种子,播种成功后已调用 farm/clear-land 把 1 号地恢复为空地。
  • 土地操作链路已按旧客户端确认:
    • 旧客户端 GameView.getMyFarmMenu 的土地菜单规则已迁移:空地播种、成长中铲除/施肥/除虫/除草、成熟收割、已收割或枯萎铲除。
    • 旧客户端 PlantCdTipSkin.exml 的长按倒计时提示已迁移,普通点击不再弹倒计时,避免遮挡操作菜单。
    • 旧客户端 BagPanelSkin.exml 的右侧背包位置继续复用,当前支持种子包和化肥包。
    • game_config.json 已作为非资源文件纳入 Web 导出,用于读取种子、作物、化肥、图标和阶段时间配置。
    • 2026-05-11 使用 13800000001 / 123456 在 Godot Web 验证:farm/diseasefarm/fertilizefarm/gather-cropfarm/clear-land 均返回 HTTP 200 且业务状态成功。
    • 验证时临时改动的测试账号土地、道具和经验数据已恢复到测试前状态。
  • 作物自动成熟刷新已确认:
    • 2026-05-11 参考 Godot Timer.timeout 机制,在农场场景增加 1 秒一次的地块视觉状态签名检查,只有阶段、收获状态或异常图标发生变化时才重绘地块。
    • 使用 13800000001 / 123456 在 Godot Web 版播种金桔种子,后端返回 crop_gather_time = crop_start_time + 22;页面不刷新等待成熟后,作物贴图自动切换为成熟金桔。
    • 点击自动成熟后的地块已验证弹出“Harvest”收获菜单验证结束后已调用 farm/clear-land 将 0 号地恢复为空地。
  • 家园菜单弹窗链路已按旧客户端确认:
    • 旧客户端 MainMenu 的弧形菜单动画已迁移为 Godot Tween仓库素材继续以仓库内 replacement 素材为准。
    • 旧客户端 ShopMediator.buy 对应 store/buy 已接入2026-05-11 使用测试账号在 Godot Web 点击商店购买金桔种子HTTP 200 且业务状态成功。
    • 旧客户端 WareHouseMediator.sellWareHouseItem 对应 store-house/sell 已接入,仓库物品点击可弹出售面板。
    • 旧客户端 FriendMediator.getRankList/getFriendList 对应 comm/get-level-rankingfriend/friend-list 已接入2026-05-11 使用同一 token 直接验证全国排行返回 total_count=70、好友排行返回 total_count=0Godot Web 全国排行显示 1/10。
  • 狗窝、房屋升级和土地扩建第一版已接入:
    • 狗屋点击打开 DogSkin 对应面板;按旧版 DogSelectFoodSkin 显示三档狗粮,接口逻辑对应 user/feed-dog
    • 房屋点击打开 BuildingSkin 对应“房屋升级”面板,读取 farm_level 配置表,材料和等级不足时按旧版禁用升级按钮;接口逻辑对应 farm/upgrade
    • 未开垦土地和扩建木牌点击打开 LandOpenSkin 对应扩建面板,读取 land_extend 配置表,等级/金币不足时禁用扩建按钮;接口逻辑对应 farm/extend-land
    • 2026-05-11 在 Godot Web 版使用 13800000001 / 123456 验证三个入口均能打开,当前账号下一块土地要求 LV.13 / 1888,因等级不足未执行不可逆扩建。
  • 宠物主场景和战宠面板已按旧资源修正:
    • 场景宠物展示从静态 petIcon 改为读取 assets/swf/dog1.{json,png} 的 Egret MovieClip 帧,饥饿状态使用趴地动画并加轻微呼吸/语言淡入淡出。
    • 宠物位置移到狗窝右侧草地区域,点击热区缩小到狗身,避免遮挡土地和抢狗窝牌子点击。
    • 战宠面板保留 BattleBaseCompomentSkin 对应的头像框、属性区、经验条、介绍区、底部宠物卡片资源,主外框和内容底图改用统一透明背景素材。
    • 战宠基础属性页的经验条按 BattleProssBar2Skin.exml 改为九宫格背景 + 裁剪遮罩填充,修复 Godot 纹理按图集原宽度向右溢出的问题。
    • 对照旧版 WidgetDog 逻辑,家园场景宠物只作为动画展示,不再点击打开战宠面板;战宠面板入口保留在世界菜单/竞技相关入口。
    • 2026-05-12 在 Godot Web 版使用 13800000001 / 123456 验证:主场景宠物可见且不压土地;点击家园宠物不打开战宠面板;世界菜单战宠入口可打开面板且经验条不越界;点击狗窝牌子仍打开“亲家护院”狗窝面板。
  • 统一面板背景素材已接入:
    • tools/batch_prepare_icons.py 增加 --cutout SOURCE OUTPUT WIDTH HEIGHT,可直接对绿幕素材抠图并输出指定尺寸透明 PNG。
    • 两张新素材已输出到 godot/FarmGodot/assets/replacement/panels/panel_shell.pnggodot/FarmGodot/assets/replacement/panels/panel_content.png
    • UiBuilder.create_panel_shell() 统一使用新外框;狗面板手写外框、商店/仓库/好友/充值/公告/世界/宠物等主内容区统一改用新内容底图。
    • 2026-05-12 通过 Godot Web 截图验证商店、仓库、好友、宠物、狗窝面板均能打开且新背景生效。
  • 异步面板关闭后的失效节点问题已修复:
    • PanelModule 增加节点存活和当前节点校验,避免面板关闭后接口返回继续调用已释放节点。
    • LevelGiftPanel、公告、日志、好友、兑换记录、宝箱、签到、福利、宠物、世界信息等同类面板已按同一规则补防护。
    • 2026-05-12 通过相关脚本 --check-only、Web 导出、npm run smoke:godot:web 和等级礼包快速打开/关闭 Playwright 检查验证。
  • 房屋升级和用户信息面板本轮修正:
    • 房屋升级按钮按 BuildingSkin.exml 的主内容组坐标上移,避免遮盖房屋贴图。
    • 用户信息顶部资料区补统一内容底图,避免新面板外框透明中心露出主场景背景。
    • 用户信息标题改用 roleinfo 图集的 panel_title_role_info_png,用户 ID 显示清理为整数文本,避免 600.0 这类浮点格式露出。
    • BoxPanelLotteryPanel 的右侧装饰节点补显式 TextureRect 类型,修复 Web 编译时 _ui.add_texture() 返回值无法推断导致主场景加载失败的问题。
    • 2026-05-12 通过 building_panel.gdplayer_info_panel.gdbox_panel.gdlottery_panel.gd 脚本检查、Web 导出、Playwright 截图和 npm run smoke:godot:web 验证。
  • 农场主界面入口和作物提示本轮修正:
    • 种子包按旧版 BagPanelSkin.exmlx=526,width=114 对齐到 640 右边缘,并隐藏内部滚动条。
    • 生长倒计时提示条按旧版 PlantCdTipSkin.exml + CDBarSkin.exml 改为背景/填充双九宫格,修复普通拉伸导致的进度条质感不一致。
    • 左侧“福利中心/Benefits”入口、命中区、回调、面板装配和 Godot 福利面板脚本已移除smoke 流程改为新的左侧菜单顺序。
    • 2026-05-13 通过相关脚本 --check-onlyverify_p0.gd、工程导入、Web 导出、npm run smoke:godot:webtools/verify_ui_regressions.gd 验证。
  • 背包外部点击关闭已接入:
    • 种子/化肥背包打开后会启用全屏透明关闭命中层;点击背包以外区域只关闭背包,不再把点击透传到土地或主菜单。
    • 背包面板本体设置为输入阻挡层,点击背包内部空白、滚动区域或物品不会触发外部关闭。
    • 2026-05-13 通过 seed_bag_view.gd 脚本检查、verify_p0.gd、Web 导出、npm run smoke:godot:webtools/verify_ui_regressions.gd 验证。
  • 作物收获/生长信息卡片拉伸问题已修复:
    • 旧版 PlantCdTipSkin.exml 使用 log_itembg_pngscale9Grid="24,20,4,3";该素材原始区域为 53x49Godot NinePatchRect 右/下边距应换算为 25/26而不是直接使用 4/3。
    • 已把作物提示卡片背景九宫格改为 24,20,25,26,避免收获信息卡片横向拉伸后边角和阴影变形。
    • 2026-05-13 通过 plant_tip_view.gd 脚本检查、verify_p0.gd、Web 导出、npm run smoke:godot:webtools/verify_ui_regressions.gd 验证。
  • 作物信息气泡常驻逻辑已补齐:
    • 有作物且未收获/未枯萎的土地会在作物头顶持续展示 PlantCdTip 气泡;点击作物弹出操作菜单或打开种子/化肥背包时隐藏。
    • 操作菜单关闭或操作完成刷新土地后,会按当前土地状态恢复气泡;收获后、空地或只剩枯萎草时不再展示。
    • 农场视口拖动或土地节点位置变化时,气泡每帧按土地当前全局位置重算,避免停留在旧坐标。
    • 2026-05-23 通过 plant_tip_view.gdfarm_interaction_coordinator.gdverify_ui_regressions.gd 脚本检查、tools/verify_ui_regressions.gdverify_p0.gd、Web 导出和 npm run smoke:godot:web 验证。
  • Home 菜单点击穿透到土地扩建的问题已修复:
    • 主场景 _input 现在先让 MainMenuController 处理 Home 按钮、菜单项和菜单外部关闭命中,命中后直接标记输入已处理,再进入农场土地点击兜底。
    • Home 弧形菜单打开时,点击 Store/Storage/Friends 等菜单项只触发对应菜单动作;点击菜单外部只关闭菜单,不再继续传给土地扩建入口。
    • 2026-05-13 通过 main_menu_controller.gdgame_scene.gdverify_ui_regressions.gd 脚本检查、tools/verify_ui_regressions.gdverify_p0.gd、Web 导出和 npm run smoke:godot:web 验证。
  • 顶部功能菜单改为单行布局:
    • 转盘入口从第二行移动到第一行第三个槽位,顺序为 Log / Land Up / Wheel / Pack
    • 第二行底部木板 TopPanelBack 隐藏,不再占用主场景上方空间。
    • 2026-05-22 通过 verify_ui_regressions.gd 增加单行菜单布局断言,并用脚本检查、verify_p0.gd、Web 导出、npm run smoke:godot:web 和 smoke 截图 docs/ui-baseline/smoke/01-main.png 验证。
  • 种植失败前台反馈已补齐:
    • 对照旧版 plantSeed() 失败分支 TipsUtils.showErrorCodeTips(status)ServerCode[1009] = "当前等级不足"Godot 现在会把后端土地操作错误码转成可见 toast不再只在控制台输出 warning。
    • FarmController 的播种、收获、铲除、施肥、浇水/除虫/除草失败均复用同一错误提示;播种成功补回旧版“播种成功”提示。
    • verify_ui_regressions.gd 增加种子背包物品点击回调断言和服务端 1009 文案断言,覆盖“点击种植没有反应”的交互链路。
  • 狗窝宠物列表背景板已修复:
    • 旧版 DogListItemSkin.exml 使用 shop_itembg_png,位置来自 assets/common.jsonRect2(262,303,179,110),之前 Godot TextureRegionCatalog 没登记该区域,导致列表项取到默认 1x1 纹理并被九宫格拉伸成异常背景。
    • 已补 shop_itembg 图集区域,继续按 EXML 的 scale9Grid="90,57,4,2" 渲染狗窝列表项。
    • 2026-05-22 通过 texture_region_catalog.gddog_panel.gdverify_ui_regressions.gd 脚本检查、verify_ui_regressions.gdverify_p0.gd、Web 导出、npm run smoke:godot:web 和 Playwright 截图 docs/ui-baseline/godot-dog-list-bg-fixed.png 验证。
  • 访问好友农场链路已接入:
    • 对照旧版 FriendItemRender.onTouchTap -> GO_OTHER_FARM -> interaction/get-other-user-info -> OPEN_OTHER_GAME,好友榜家园/手指按钮现在会请求好友农场数据并切换到访客农场。
    • 新增 InteractionApiFriendVisitController,接入 interaction/get-other-user-infointeraction/interaction;好友土地动作按后端 interaction_type_list 映射偷菜、放虫、放草、浇水、除虫、除草。
    • 访客模式隐藏自家 Home/World/左侧活动/顶部功能按钮和建筑扩建热区,只保留旧版 btn_back_home_png 回家按钮;返回后恢复自家玩家状态、土地、菜单和命中区。
    • 2026-05-22 通过相关脚本 --check-onlyverify_p0.gd、工程导入、Web 导出、tools/verify_ui_regressions.gdnpm run smoke:godot:web 和 Playwright 截图 docs/ui-baseline/smoke/22-friend-panel.pngdocs/ui-baseline/smoke/23-friend-visit.pngdocs/ui-baseline/smoke/24-friend-back-home.png 验证。
  • 土地扩建金豆图标约束已修复:
    • 原版 LandOpenSkin.exml 使用 sicon_gold_png,图集区域为 35x35Godot 当前替换素材 assets/replacement/ui/gold_bean.png 为 500x500之前 TextureRect 在入树后继承原图最小尺寸,导致扩建弹窗右下角出现超大金豆。
    • UiBuilder.add_texture() 改为先设置 EXPAND_IGNORE_SIZE 和伸缩模式,再绑定纹理和显式尺寸;扩建弹窗 GoldIcon 明确使用 STRETCH_KEEP_ASPECT_CENTERED,保持原版 35x35 容器。
    • 2026-05-22 通过 ui_builder.gdbuilding_panel.gdverify_ui_regressions.gd 脚本检查、tools/verify_ui_regressions.gdverify_p0.gd、Web 导出、npm run smoke:godot:web 和 Playwright 截图 docs/ui-baseline/godot-land-open-gold-icon-fixed.png 验证。

下一步

  1. 继续压登录页像素差异,优先处理按钮文字和底部健康提示字体。
  2. 对照 egret-main-page.png 继续压主农场:左侧入口层级、世界/家园入口、顶部 FNT 字体。
  3. 继续收敛 PlayerState/FarmState/InventoryState,减少 UI 层直接改字典。
  4. 继续补齐未开垦土地购买/开放细节,并把土地相关 UI 从 game_scene.gd 拆到独立模块。
  5. 补齐好友搜索、好友申请和好友互动日志/赠送等二级链路。