fix:重进比赛逻辑优化
This commit is contained in:
@@ -19,12 +19,17 @@ const ended = ref(false);
|
|||||||
const halfTime = ref(false);
|
const halfTime = ref(false);
|
||||||
const currentShot = ref(0);
|
const currentShot = ref(0);
|
||||||
const totalShot = ref(0);
|
const totalShot = ref(0);
|
||||||
|
/** 标记组件是否已完成挂载,防止 immediate watcher 在挂载前用旧 store 值触发意外播音 */
|
||||||
|
const isMounted = ref(false);
|
||||||
|
|
||||||
watch(
|
watch(
|
||||||
() => tips.value,
|
() => tips.value,
|
||||||
(newVal) => {
|
(newVal) => {
|
||||||
|
// 挂载完成前不播音(避免 immediate store watcher 用旧值触发多余播报)
|
||||||
|
if (!isMounted.value) return;
|
||||||
|
// 空字符串或含"重回"的 tips 均不播音
|
||||||
|
if (!newVal || newVal.includes("重回")) return;
|
||||||
let key = [];
|
let key = [];
|
||||||
if (newVal.includes("重回")) return;
|
|
||||||
if (currentRoundEnded.value) {
|
if (currentRoundEnded.value) {
|
||||||
// 播放当前轮次语音
|
// 播放当前轮次语音
|
||||||
key.push(`第${["一", "二", "三", "四", "五"][currentRound.value]}轮`);
|
key.push(`第${["一", "二", "三", "四", "五"][currentRound.value]}轮`);
|
||||||
@@ -113,6 +118,7 @@ watch(() => store.game.tips, (newVal) => {
|
|||||||
}, { immediate: true });
|
}, { immediate: true });
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
|
isMounted.value = true;
|
||||||
uni.$on("update-tips", onUpdateTips);
|
uni.$on("update-tips", onUpdateTips);
|
||||||
uni.$on("socket-inbox", onReceiveMessage);
|
uni.$on("socket-inbox", onReceiveMessage);
|
||||||
uni.$on("play-sound", playSound);
|
uni.$on("play-sound", playSound);
|
||||||
|
|||||||
@@ -132,8 +132,18 @@ const recoverData = (battleInfo, {force = false, arrowOnly = false} = {}) => {
|
|||||||
// ShootProgress2(v-if="start")尚未挂载,update-remain 事件会被丢弃。
|
// ShootProgress2(v-if="start")尚未挂载,update-remain 事件会被丢弃。
|
||||||
// 同时 HeaderProgress 对含"重回"的 tips 拦截音频,倒计时无法依赖
|
// 同时 HeaderProgress 对含"重回"的 tips 拦截音频,倒计时无法依赖
|
||||||
// onAudioEnded 驱动,需在 nextTick 后直接启动。
|
// onAudioEnded 驱动,需在 nextTick 后直接启动。
|
||||||
|
|
||||||
|
// playerId=0 表示后端处于过渡状态(上一位射手已完成、下一位尚未分配)
|
||||||
|
// 此时 startTime/targetTeam 均不可靠,停止进度条并等待 WS ToSomeoneShoot 驱动
|
||||||
|
if (!battleInfo.current.playerId) {
|
||||||
|
nextTick(() => {
|
||||||
|
uni.$emit("update-tips", nextTips);
|
||||||
|
uni.$emit("update-remain", {stop: true});
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
const elapsed = (Date.now() - battleInfo.current.startTime) / 1000;
|
const elapsed = (Date.now() - battleInfo.current.startTime) / 1000;
|
||||||
console.log(`当前轮已进行${elapsed}秒`);
|
|
||||||
if (elapsed > 0 && elapsed < shootTimeTotal.value) {
|
if (elapsed > 0 && elapsed < shootTimeTotal.value) {
|
||||||
updateRemainSecond.value = shootTimeTotal.value - elapsed - 0.2;
|
updateRemainSecond.value = shootTimeTotal.value - elapsed - 0.2;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user