update:优化vip飞行特效

This commit is contained in:
2026-07-27 16:55:56 +08:00
parent e6f11d3684
commit 02f30e88ba
4 changed files with 122 additions and 47 deletions
+19 -8
View File
@@ -80,7 +80,7 @@ const shotEffect = ref(null);
const hiddenRedLatestKey = ref("");
const hiddenBlueLatestKey = ref("");
const targetShaking = ref(false);
const targetSize = ref({ width: 0, height: 0 });
const targetRect = ref({ left: 0, top: 0, width: 0, height: 0 });
const shakeTimer = ref(null);
const instance = getCurrentInstance();
const ROUND_TIP_OFFSET_Y = -32;
@@ -180,7 +180,7 @@ function shakeTarget() {
});
}
function updateTargetSize() {
function updateTargetRect() {
nextTick(() => {
const query = instance?.proxy
? uni.createSelectorQuery().in(instance.proxy)
@@ -189,18 +189,27 @@ function updateTargetSize() {
query
.select(".target")
.boundingClientRect((rect) => {
const left = Number(rect?.left);
const top = Number(rect?.top);
const width = Number(rect?.width);
const height = Number(rect?.height);
if (!Number.isFinite(width) || !Number.isFinite(height)) return;
if (
!Number.isFinite(left) ||
!Number.isFinite(top) ||
!Number.isFinite(width) ||
!Number.isFinite(height)
) {
return;
}
if (width <= 0 || height <= 0) return;
targetSize.value = { width, height };
targetRect.value = { left, top, width, height };
})
.exec();
});
}
function handleWindowResize() {
updateTargetSize();
updateTargetRect();
}
function shouldHideRedHit(index) {
@@ -408,7 +417,7 @@ async function onReceiveMessage(message) {
onMounted(() => {
uni.$on("socket-inbox", onReceiveMessage);
updateTargetSize();
updateTargetRect();
if (uni.onWindowResize) uni.onWindowResize(handleWindowResize);
});
@@ -533,8 +542,10 @@ onBeforeUnmount(() => {
:shot="shotEffect && shotEffect.shot"
:playKey="shotEffect ? shotEffect.key : ''"
:targetRadius="safeTargetRadius"
:targetWidth="targetSize.width"
:targetHeight="targetSize.height"
:targetLeft="targetRect.left"
:targetTop="targetRect.top"
:targetWidth="targetRect.width"
:targetHeight="targetRect.height"
:hitOffsetPx="currentHitRadiusPx"
@impact="shakeTarget"
@complete="completeShotEffect"