From e0b22f40fb068659f4f1d166abd2f2d3b4de4f15 Mon Sep 17 00:00:00 2001 From: DKChan <524912269@qq.com> Date: Fri, 6 Nov 2026 05:55:36 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B7=A5=E7=A8=8B(=E7=9C=9F=E8=BE=93=E5=85=A5?= =?UTF-8?q?=E5=8C=964/7=C2=B7shot=5Fprobe):=207=E5=A4=84emit=E2=86=92?= =?UTF-8?q?=E7=9C=9F=E8=BE=93=E5=85=A5=E2=80=94=E2=80=94=E8=AE=BE=E7=BD=AE?= =?UTF-8?q?=E5=BC=80/=E5=85=B3=E3=80=81=E7=94=9F=E6=B6=AF=E5=85=B3?= =?UTF-8?q?=E3=80=81=E7=8A=B6=E6=80=81=E9=9D=A2=E6=9D=BF=E5=BC=80/?= =?UTF-8?q?=E5=85=B3=3D=E7=9C=9F=E7=82=B9find=5Fbutton=E5=91=BD=E4=B8=AD?= =?UTF-8?q?=E9=92=AE,=E7=AF=9D=E7=81=AB=3Dpush=5Fclick=5Fat=E7=83=AD?= =?UTF-8?q?=E7=82=B9=E4=B8=AD=E5=BF=83,=E4=BA=8C=E6=AC=A1=E7=A1=AE?= =?UTF-8?q?=E8=AE=A4=3D=E7=9C=9F=E7=82=B9=5Fconfirm=5Fbtn(ui=5Fclick=5Fpro?= =?UTF-8?q?be:702=E5=85=88=E4=BE=8B);=20=E5=88=A4=E6=8D=AE=E5=87=BA?= =?UTF-8?q?=E5=A4=84=E6=B3=A8=E8=AE=B09=E6=9D=A1(code-conventions:54?= =?UTF-8?q?=E9=81=AE=E6=8C=A1=E7=BA=AA=E5=BE=8B+=E8=AE=BE=E7=BD=AE?= =?UTF-8?q?=E4=B8=8E=E6=9C=AC=E5=9C=B0=E5=8C=96:95+camp.md:45/16/22+level-?= =?UTF-8?q?map:11/77+battle.md:122+HUD=E6=A1=86=E6=9E=B6:264/277+test-conv?= =?UTF-8?q?entions:84=E6=88=AA=E5=9B=BE=E9=87=87=E9=9B=86);=20=E6=9C=AC?= =?UTF-8?q?=E6=AD=A5=E5=87=AD=E6=8D=AE:=20shot=5Fprobe=E7=AA=97=E5=8F=A3?= =?UTF-8?q?=E5=8C=96=E7=9B=B4=E8=B7=91PASS=20exit=3D0(=E4=B8=83=E5=B1=8F12?= =?UTF-8?q?80x800=E5=85=A8=E5=AD=98,=E9=97=AE=E9=A2=98=3D0,battle=20draw?= =?UTF-8?q?=5Fcalls=3D194<200)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- game/probe/shot_probe.gd | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/game/probe/shot_probe.gd b/game/probe/shot_probe.gd index 1981c89e..eb66e9bd 100644 --- a/game/probe/shot_probe.gd +++ b/game/probe/shot_probe.gd @@ -46,6 +46,7 @@ func _ready() -> void: await get_tree().process_frame # ① 菜单(启动态)——无帮助文腿(玩法速览牌不在画面,checker 无对应断言段); # 无副标题件,菜单文字锚只剩标题 + # oracle: design/engineering/code-conventions.md:54 模态覆盖层层级规则——boot 态顶层=start_overlay、菜单文字在屏(菜单组) # 自检一:boot 态顶层可见全屏层=start_overlay(内容层树遍历——屏壳是容器不当候选: # camp 壳 boot 态 vis=true 但成员恒隐,裸树遍历自顶向下会先命中透明壳) var top: Node = null @@ -82,11 +83,12 @@ func _ready() -> void: _meta[String(pair[0])] = ProbeUiUtil.label_rect(main.ui.screens.start_overlay, String(pair[1])) await _snap("menu") # ①b 设置面(settingsbtn 真实信号路径,开合同款真实钮) + # oracle: design/gdd/systems/表现与支撑/设置与本地化.md:95 最小设置面已兑现:音量/减动效/全屏/退出,载体=独立设置存储+设置界面视图(设置组) var setbtn: Button = ProbeUiUtil.find_button(main.ui.screens.start_overlay, "设置", "prefix") if setbtn == null: _problems.append("设置入口缺失(开始层 settingsbtn)") else: - setbtn.pressed.emit() + ProbeUiUtil.push_click(main, setbtn) for i in 3: await get_tree().process_frame if not main.ui.modals.menu.settings_overlay.visible: @@ -98,9 +100,10 @@ func _ready() -> void: if set_close == null: _problems.append("设置面返回钮缺失") else: - set_close.pressed.emit() + ProbeUiUtil.push_click(main, set_close) await get_tree().process_frame # ①c 生涯页(函数直调中间态——卡② mn10:careerbtn 已撤,卡④ 笔记本改挂前无 UI 路径) + # oracle: design/gdd/ux/camp.md:45 生涯页与四子界面同壳同形态(生涯组) if true: main._open_career() for i in 3: @@ -114,27 +117,31 @@ func _ready() -> void: if career_close == null: _problems.append("生涯页返回钮缺失") else: - career_close.pressed.emit() + ProbeUiUtil.push_click(main, career_close) for i in 3: await get_tree().process_frame if main.ui.modals.menu.career_overlay.visible or not main.ui.screens.start_overlay.visible: _problems.append("生涯页关闭后页未隐藏或开始层未恢复") # ② 营地场景图(进档开层新路径——卡② mn9;截图=可点击场景图形态——卡④ 契约 9 V1 验收载体) + # oracle: design/gdd/ux/camp.md:16 营地=可点击场景图(七物件命中区表——场景图形态组) if not await ProbeUiUtil.open_camp_via_savesel(main, "smoke_shot_probe_camp"): _problems.append("营地入口缺失(选档层新档钮——新路径驱动中断)〔句柄子容器批 V1〕") else: await get_tree().process_frame await _snap("camp") - main.ui.modals.camp.scene.object_pressed.emit(&"campfire") # 收闭改接篝火动线(营地根态无关闭钮——卡④ T5) + ProbeUiUtil.push_click_at(main, main.ui.modals.camp.scene.get_hotspot_rect(&"campfire").get_center()) # 收闭改接篝火动线(营地根态无关闭钮——卡④ T5) await get_tree().process_frame - main.ui.modals.menu.confirm_dialog.confirmed.emit() # 二次确认离场(关层收闭——选档层随收) + ProbeUiUtil.push_click(main, main.ui.modals.menu.confirm_dialog._confirm_btn) # 二次确认离场(关层收闭——选档层随收) + # oracle: design/gdd/ux/camp.md:22 篝火=离开营地回主菜单、必须二次确认(篝心动线组) await get_tree().process_frame # ③ 关卡画面(开始冒险→停点出图——入口停点语义;函数直调中间态 mn10) + # oracle: design/gdd/ux/level-map.md:11 入口停点候选数=入口个数(关卡画面出图组) main._start_adventure_from_menu() for i in 4: await get_tree().process_frame await _snap("level") # GP 常驻徽章断言(读数=runner.gp 现值,刷新=写路径回执后重查〔open_choices〕) + # oracle: design/gdd/ux/level-map.md:77 GP 常驻徽章=GP 图标+数字(冒险钱包读数;写路径回执后重查) var gp_label: Label = ProbeUiUtil.find_label(main.ui.modals.run.level_screen, "◈ ") if gp_label == null or not gp_label.is_visible_in_tree(): _problems.append("GP 徽章不可见(关卡画面顶栏)") @@ -143,6 +150,7 @@ func _ready() -> void: if gp_label.text != expect: _problems.append("GP 徽章读数不符: %s != %s" % [gp_label.text, expect]) # ④ 战斗(节点一——真实选路提交路径 press_candidate,ui_click_probe :199 同款) + # oracle: design/gdd/ux/battle.md:122 B 区构建:站桩/明细带/轮次指示(战斗出图与几何锚组) if main.ui.modals.run.level_screen != null and main.ui.modals.run.level_screen.visible: main.ui.modals.run.level_screen.press_candidate(0) for i in 10: @@ -154,17 +162,19 @@ func _ready() -> void: _meta["stage_view"] = _node_rect(main.ui.battle.stage) _meta["board_zone"] = _node_rect(main.ui.battle.board_zone) # draw calls 真机测量(基线 270→目标 <200;窗口化渲染帧读数, + # oracle: design/gdd/systems/表现与支撑/HUD框架.md:264 同屏 draw calls < 200(战斗屏性能预算组) # 取值时机=战斗截图同帧后一帧——呈现终态满负荷) await get_tree().process_frame var dc := int(Performance.get_monitor(Performance.RENDER_TOTAL_DRAW_CALLS_IN_FRAME)) _meta["battle_draw_calls"] = dc print("[shot_probe] battle draw_calls=%d(基线 270/目标 <200)" % dc) # ⑤ 状态面板(战斗屏状态角标真实信号路径;层在战斗屏之上开合) + # oracle: design/gdd/systems/表现与支撑/HUD框架.md:277 模态打开遮挡或输入锁定、关闭逐层恢复(状态面板组) var pb: Button = main.ui.battle.board_zone.status_badge if pb == null or not pb.visible or pb.disabled: _problems.append("状态面板入口角标缺失/置灰(战斗屏 board_zone)") else: - pb.pressed.emit() + ProbeUiUtil.push_click(main, pb) for i in 3: await get_tree().process_frame if not main.ui.modals.run.status_panel.visible: @@ -176,7 +186,7 @@ func _ready() -> void: if status_close == null: _problems.append("状态面板继续钮缺失") else: - status_close.pressed.emit() + ProbeUiUtil.push_click(main, status_close) await get_tree().process_frame if main.ui.modals.run.status_panel.visible: _problems.append("状态面板关闭后未隐藏(继续钮路径)") @@ -201,6 +211,7 @@ func _ready() -> void: func _snap(key: String) -> void: + # oracle: design/engineering/test-conventions.md:84 golden 测试项扩项——截图采集清单扩项、实跑截图冻结(截图采集组) await RenderingServer.frame_post_draw await RenderingServer.frame_post_draw var img: Image = get_viewport().get_texture().get_image()