修复大乱斗返回游戏bug

This commit is contained in:
kron
2025-07-19 16:16:53 +08:00
parent b9aff0082b
commit 31e89144ec
3 changed files with 31 additions and 42 deletions

View File

@@ -7,6 +7,10 @@ import { storeToRefs } from "pinia";
const store = useStore(); const store = useStore();
const { user } = storeToRefs(store); const { user } = storeToRefs(store);
const props = defineProps({ const props = defineProps({
show: {
type: Boolean,
default: true,
},
start: { start: {
type: Boolean, type: Boolean,
default: false, default: false,
@@ -182,7 +186,7 @@ onUnmounted(() => {
</script> </script>
<template> <template>
<view class="container"> <view class="container" :style="{ display: show ? 'block' : 'none' }">
<view> <view>
<image src="../static/shooter.png" mode="widthFix" /> <image src="../static/shooter.png" mode="widthFix" />
<text>{{ start && remain === 0 ? "时间到!" : tips }}</text> <text>{{ start && remain === 0 ? "时间到!" : tips }}</text>

View File

@@ -150,38 +150,27 @@ onLoad(async (options) => {
} }
} else if (battleInfo.config.mode === 2) { } else if (battleInfo.config.mode === 2) {
players.value = [...battleInfo.blueTeam, ...battleInfo.redTeam]; players.value = [...battleInfo.blueTeam, ...battleInfo.redTeam];
players.value.forEach((p) => {
playersScores.value[p.id] = [];
});
if (battleInfo.startTime < 0) return; if (battleInfo.startTime < 0) return;
start.value = true; start.value = true;
step.value = 3; step.value = 3;
players.value.forEach((p) => { players.value.forEach((p) => {
playersScores.value[p.id] = p.arrows; playersScores.value[p.id] = [...p.arrows];
if (p.id === user.value.id) { if (p.id === user.value.id) {
scores.value = p.arrows; scores.value = [...p.arrows];
} }
}); });
tips.value = `${
scores.value.length ? "下半场-" : "上半场-"
}请连续射6箭`;
const remain = Date.now() / 1000 - battleInfo.startTime; const remain = Date.now() / 1000 - battleInfo.startTime;
console.log(`当前局剩余${remain}`); console.log(`当前局已进行${remain}`);
if (remain <= 90) { if (battleInfo.status === 2) {
tips.value = `${
battleInfo.halfGame ? "下半场-" : "上半场-"
}请连续射6箭`;
setTimeout(() => { setTimeout(() => {
uni.$emit("update-ramain", remain); uni.$emit("update-ramain", 90 - remain);
}, 300); }, 300);
} else if (remain > 90 && remain <= 110) { } else if (battleInfo.status === 9) {
halfTimeTip.value = true; startCount.value = false;
total.value = 20;
tips.value = "准备下半场"; tips.value = "准备下半场";
setTimeout(() => {
uni.$emit("update-ramain", 110 - remain);
}, 300);
} else if (remain > 110) {
setTimeout(() => {
uni.$emit("update-ramain", remain - 110);
}, 300);
} }
} }
} }
@@ -405,11 +394,11 @@ async function onReceiveMessage(messages = []) {
} }
} }
if (battleType.value === 2 && msg.userId === user.value.id) { if (battleType.value === 2 && msg.userId === user.value.id) {
scores.value.push(msg.target); scores.value.push({ ...msg.target });
power.value = msg.target.battery; power.value = msg.target.battery;
} }
if (playersScores.value[msg.userId]) if (playersScores.value[msg.userId])
playersScores.value[msg.userId].push(msg.target); playersScores.value[msg.userId].push({ ...msg.target });
} }
if (msg.constructor === MESSAGETYPES.CurrentRoundEnded) { if (msg.constructor === MESSAGETYPES.CurrentRoundEnded) {
if (battleType.value === 1) { if (battleType.value === 1) {

View File

@@ -58,31 +58,27 @@ onLoad(async (options) => {
if (battleInfo) { if (battleInfo) {
battleId.value = battleInfo.id; battleId.value = battleInfo.id;
players.value = [...battleInfo.blueTeam, ...battleInfo.redTeam]; players.value = [...battleInfo.blueTeam, ...battleInfo.redTeam];
players.value.forEach((p) => {
playersScores.value[p.id] = [];
});
if (battleInfo.startTime <= 0) return; if (battleInfo.startTime <= 0) return;
start.value = true; start.value = true;
players.value.forEach((p) => { players.value.forEach((p) => {
playersScores.value[p.id] = p.arrows; playersScores.value[p.id] = [...p.arrows];
if (p.id === user.value.id) { if (p.id === user.value.id) {
scores.value = p.arrows; scores.value = [...p.arrows];
} }
}); });
tips.value = `${scores.value.length ? "下半场-" : "上半场-"}请连续射6箭`;
const remain = Date.now() / 1000 - battleInfo.startTime; const remain = Date.now() / 1000 - battleInfo.startTime;
console.log(`当前局剩余${remain}`); // 这里的开始时间不是游戏开始时间,而是上半场或者下半场或者中场的开始时间,还要根据状态来判断
if (remain <= 90) { console.log(`当前局已进行${remain}`);
if (battleInfo.status === 2) {
tips.value = `${
battleInfo.halfGame ? "下半场-" : "上半场-"
}请连续射6箭`;
setTimeout(() => { setTimeout(() => {
uni.$emit("update-ramain", remain); uni.$emit("update-ramain", 90 - remain);
}, 300); }, 300);
} else if (remain > 90 && remain <= 110) { } else if (battleInfo.status === 9) {
startCount.value = false; startCount.value = false;
tips.value = "准备下半场"; tips.value = "准备下半场";
} else if (remain > 110) {
setTimeout(() => {
uni.$emit("update-ramain", remain - 110);
}, 300);
} }
} }
} else { } else {
@@ -140,10 +136,10 @@ async function onReceiveMessage(messages = []) {
} }
if (msg.constructor === MESSAGETYPES.ShootResult) { if (msg.constructor === MESSAGETYPES.ShootResult) {
if (msg.userId === user.value.id) { if (msg.userId === user.value.id) {
scores.value.push(msg.target); scores.value.push({ ...msg.target });
power.value = msg.target.battery; power.value = msg.target.battery;
} }
playersScores.value[msg.userId].push(msg.target); playersScores.value[msg.userId].push({ ...msg.target });
} }
if (msg.constructor === MESSAGETYPES.HalfTimeOver) { if (msg.constructor === MESSAGETYPES.HalfTimeOver) {
uni.$emit("update-ramain", 0); uni.$emit("update-ramain", 0);
@@ -190,7 +186,7 @@ onUnmounted(() => {
keepScreenOn: false, keepScreenOn: false,
}); });
uni.$off("socket-inbox", onReceiveMessage); uni.$off("socket-inbox", onReceiveMessage);
if (gameType.value && teamSize.value) { if (gameType.value && teamSize.value && !battleId.value) {
matchGameAPI(false, gameType.value, teamSize.value); matchGameAPI(false, gameType.value, teamSize.value);
} }
}); });
@@ -207,7 +203,7 @@ onUnmounted(() => {
<BattleHeader v-if="!start" :players="players" /> <BattleHeader v-if="!start" :players="players" />
<TestDistance v-if="!start" :guide="false" /> <TestDistance v-if="!start" :guide="false" />
<ShootProgress <ShootProgress
v-if="start" :show="start"
:seq="seq" :seq="seq"
:start="start && startCount" :start="start && startCount"
:tips="tips" :tips="tips"