From cbac48e468b2bb5512eb72988e5ec4523c19836f Mon Sep 17 00:00:00 2001 From: JOJO <1498581755@qq.com> Date: Thu, 6 Aug 2026 16:36:23 +0800 Subject: [PATCH] =?UTF-8?q?Boss=E9=80=9A=E7=94=A8=E7=A7=BB=E5=8A=A8?= =?UTF-8?q?=E6=94=B9=E4=B8=BA=E9=9A=8F=E6=9C=BA=E9=95=BF=E5=BA=A6=E5=BE=80?= =?UTF-8?q?=E8=BF=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 通用游走(8个Boss,钢琴站桩/突击/夺权者X专属移动保留):一左一右方向交替 - 每趟移动长度随机(普通50~105px,宽体35~80px),不再固定sin幅度 - 边界按Boss判定半径计算(minX=12+r0/maxX=W-12-r0,宽体+6),目标clamp边界内永不撞边 - 已模拟2万帧验证全部Boss不越界、方向正常交替;上下浮动与b.mt冻结约定不变 --- star-raid/js/enemies.js | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/star-raid/js/enemies.js b/star-raid/js/enemies.js index a173b49..61a6a7e 100644 --- a/star-raid/js/enemies.js +++ b/star-raid/js/enemies.js @@ -312,7 +312,16 @@ function updateBoss(){ else if(b.idx===6){const usp=b.phase>=1?0.028:0.008,amp=b.phase>=1?70:44; b.x=clamp(b.x+amp*usp*Math.cos(b.mt*usp),30,W-30); // 速度积分定位:换阶段参数突变也不瞬移 b.yA=(b.yA||8)+((b.phase>=1?12:8)-(b.yA||8))*0.05;b.y=b.ty+Math.sin(b.mt*0.011)*b.yA;} // 夺权者X:P1巨大笨重→P2紧凑灵活 - else{b.x=W/2+Math.sin(b.mt*0.013)*(def.wide?44:70);b.y=b.ty+Math.sin(b.mt*0.011)*(def.wide?8:12);} // 通用游走提速+上下浮动(钢琴站桩除外) + else{ // 通用游走:随机长度左右往返(方向交替),边界按判定半径计算不撞边 + const r0=(def.rr&&def.rr[0])||def.r||20,mgn=12+(def.wide?6:0); + const minX=mgn+r0,maxX=W-mgn-r0; + if(typeof b.tx!=="number")b.tx=clamp(b.x,minX,maxX); // 落地后首帧初始化 + const dx=b.tx-b.x,spd=def.wide?0.8:1.05; + if(Math.abs(dx)<=spd){b.x=b.tx; // 到达:换方向,每趟长度随机(长度不够空间时自动收敛到边界内) + const dir=dx>=0?-1:1,len=def.wide?rndi(35,80):rndi(50,105); + b.tx=clamp(b.x+dir*len,minX,maxX);} + else b.x+=Math.sign(dx)*spd; + b.y=b.ty+Math.sin(b.mt*0.011)*(def.wide?8:12);} // 上下浮动保留(钢琴站桩除外) b.mt++; const fm=b.fireM*(1+0.22*b.phase); if(b.fnT>0)b.fnT--;if(b.plT>0)b.plT--;if(b.eyeT>0)b.eyeT--;if(b.hornT>0)b.hornT--;if(b.laserT>0)b.laserT--;if(b.eyeGlow>0)b.eyeGlow--;if(b.rainT>0)b.rainT--;if(b.turrT>0)b.turrT--;if(b.pedT>0)b.pedT--; // 帧级技能计时器