From 6d434e89ab4509adee6561e351b5bceef1c6e55b Mon Sep 17 00:00:00 2001 From: chenlimao Date: Wed, 13 May 2026 10:49:37 +0800 Subject: [PATCH] =?UTF-8?q?fix=EF=BC=9A=E4=BF=AE=E5=A4=8D=E9=87=8D?= =?UTF-8?q?=E8=BF=9B=E6=AF=94=E8=B5=9B=E8=BF=9B=E5=BA=A6=E6=9D=A1=E4=B8=A2?= =?UTF-8?q?=E5=A4=B1=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/team-battle.vue | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/src/pages/team-battle.vue b/src/pages/team-battle.vue index e4e565a..8986437 100644 --- a/src/pages/team-battle.vue +++ b/src/pages/team-battle.vue @@ -115,15 +115,29 @@ const recoverData = (battleInfo, {force = false, arrowOnly = false} = {}) => { tips.value = nextTips; uni.$emit("update-tips", nextTips); // redPlayer 已在上方 find() 确认:不为 null 则当前射手在红队 - uni.$emit("update-remain", {reset: true, value: 15, team: redPlayer?'red':'blue'}); + const targetTeam = redPlayer ? 'red' : 'blue'; if (force) { - const remain = (Date.now() - battleInfo.current.startTime) / 1000; - console.log(`当前轮已进行${remain}秒`); - if (remain > 0 && remain < 15) { - updateRemainSecond.value = 15 - remain - 0.2 + // force 模式下 start.value 刚由 null 变 true,Vue 异步调度渲染, + // ShootProgress2(v-if="start")尚未挂载,update-remain 事件会被丢弃。 + // 同时 HeaderProgress 对含"重回"的 tips 拦截音频,倒计时无法依赖 + // onAudioEnded 驱动,需在 nextTick 后直接启动。 + const elapsed = (Date.now() - battleInfo.current.startTime) / 1000; + console.log(`当前轮已进行${elapsed}秒`); + if (elapsed > 0 && elapsed < 15) { + updateRemainSecond.value = 15 - elapsed - 0.2; } + const actualRemain = updateRemainSecond.value; + nextTick(() => { + // 等 ShootProgress2 挂载后再发重置事件,确保事件能被接收 + uni.$emit("update-remain", {reset: true, value: 15, team: targetTeam}); + // 重置动画完成后,直接启动倒计时(无需依赖音频结束回调) + setTimeout(() => { + uni.$emit("update-remain", {stop: false, value: actualRemain, team: targetTeam}); + }, 100); + }); } else { - updateRemainSecond.value = battleInfo.readyTime + uni.$emit("update-remain", {reset: true, value: 15, team: targetTeam}); + updateRemainSecond.value = battleInfo.readyTime; } } else { currentRound.value = battleInfo.current.round || 1;