From 946f0e072d4c625dc060ffab820ad2ae7062ef9c Mon Sep 17 00:00:00 2001 From: JOJO <1498581755@qq.com> Date: Thu, 6 Aug 2026 01:11:00 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=A6=E6=89=8B=E6=89=AB=E5=87=BB=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3=EF=BC=9A=E9=9D=9E=E6=89=AB=E5=87=BB=E4=BE=A7=E4=BF=9D?= =?UTF-8?q?=E6=8C=81=E5=BE=85=E6=9C=BA=EF=BC=88=E4=B8=8D=E5=86=8D=E5=8F=8C?= =?UTF-8?q?=E4=BE=A7=E9=BD=90=E6=89=AB=EF=BC=89=EF=BC=9B=E8=A7=A6=E5=8F=91?= =?UTF-8?q?=3D9=E7=A7=92=E4=B8=80=E6=AC=A1=E5=B7=A6=E5=8F=B3=E9=9A=8F?= =?UTF-8?q?=E6=9C=BA+=E7=8E=A9=E5=AE=B6=E9=9D=A0=E8=BF=91=EF=BC=88?= =?UTF-8?q?=E6=A8=AA=E5=90=9152px/=E4=B8=8B=E6=96=B995px=EF=BC=89=E7=AB=8B?= =?UTF-8?q?=E5=8D=B3=E8=A7=A6=E5=8F=91=E5=AF=B9=E5=BA=94=E4=BE=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- js/enemies.js | 33 +++++++++++++++++++-------------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/js/enemies.js b/js/enemies.js index 581ca8b..31ab5f1 100644 --- a/js/enemies.js +++ b/js/enemies.js @@ -50,7 +50,7 @@ function tentSegs(b,side,opF){ // 触手7节局部坐标(相对Boss中心) const pts=[];opF=opF===undefined?1:opF; for(let i=0;i<7;i++){ let ang=Math.sin((b.t-i*2.2)*0.06)*0.07*side,stretch=1,glow=0; - if(b.tent){const s=tentPose(b.tent,side,b.t-i*2.2);ang=s.ang;stretch=s.stretch;glow=s.glow;} + if(b.tent&&b.tent.side===side){const s=tentPose(b.tent,side,b.t-i*2.2);ang=s.ang;stretch=s.stretch;glow=s.glow;} // 仅扫击侧动作,另一侧保持待机摆动 const f=i/6,L=40*stretch*f*opF; pts.push({x:side*9+Math.sin(ang)*L,y:24+Math.cos(ang)*L,glow}); } @@ -312,20 +312,25 @@ function updateBoss(){ if(b.plT===90){b.warpChg=0;bossBeam(b.x,b.y+6,b.x,H+8,b.phase>=1?24:20,"#5cff9d",10,80,30,{b,ox:0,oy:6,followX2:true,sweep:1,amp:b.phase>=1?70:50});} } } - if(b.idx===10&&b.tent){const tn=b.tent; // 泰伦:触手扫击(前摇→横扫→顿挫→收回;触手即碰撞体) - if(tn.warn>0){tn.warn--;if(tn.warn<=0){tn.act=45;tn.hitDone=false;}} - else if(tn.act>0){tn.act--; - if(!tn.hitDone){ // 扫击+顿挫全期:玩家与触手各节线段做点-线段碰撞 - const p=G.p; - if(p.dead<=0){const pts=tentSegs(b,tn.side),lx=p.x-b.x,ly=p.y-b.y; - for(let i=1;i<7;i++){const f=i/6,sr=3.2*(1-f*0.45)+G.stat.hitR+1; - const ax=pts[i-1].x,ay=pts[i-1].y,dx=pts[i].x-ax,dy=pts[i].y-ay,L2=dx*dx+dy*dy||1; - const tt=clamp(((lx-ax)*dx+(ly-ay)*dy)/L2,0,1),cx=ax+dx*tt,cy=ay+dy*tt; - if(dist2(lx,ly,cx,cy)=1&&!b.tent){const p=G.p; + if(p.dead<=0&&Math.abs(p.x-b.x)<52&&p.y>b.y&&p.y0){tn.warn--;if(tn.warn<=0){tn.act=45;tn.hitDone=false;}} + else if(tn.act>0){tn.act--; + if(!tn.hitDone){ // 扫击+顿挫全期:玩家与触手各节线段做点-线段碰撞 + const p=G.p; + if(p.dead<=0){const pts=tentSegs(b,tn.side),lx=p.x-b.x,ly=p.y-b.y; + for(let i=1;i<7;i++){const f=i/6,sr=3.2*(1-f*0.45)+G.stat.hitR+1; + const ax=pts[i-1].x,ay=pts[i-1].y,dx=pts[i].x-ax,dy=pts[i].y-ay,L2=dx*dx+dy*dy||1; + const tt=clamp(((lx-ax)*dx+(ly-ay)*dy)/L2,0,1),cx=ax+dx*tt,cy=ay+dy*tt; + if(dist2(lx,ly,cx,cy)0){tn.rec--;if(tn.rec<=0)b.tent=null;} } - else if(tn.rec>0){tn.rec--;if(tn.rec<=0)b.tent=null;} } const lck=(b.laserT||0)>0; // 巨宽核心激光期间压制其他攻击 // —— 主攻击 —— @@ -491,7 +496,7 @@ function bossMinor(b,mk,fm){ case "tentSweep": // 泰伦:触手扫击(P2+):随机一侧触手,前摇后拉蓄力→60°扇形挥鞭 if(b.phase<1){b.minorT=80;break;} if(!b.tent){b.tent={side:pick([-1,1]),warn:50,act:0,rec:0,trail:null};SFX.warn();} - b.minorT=Math.round(560/fm);break; + b.minorT=Math.round(540/fm);break; // 自动扫击:9秒一次 case "acidGas": // 泰伦:酸蚀气体(P3):触手末端释放毒雾向下飘 if(b.phase<2){b.minorT=80;break;} for(const sd of[-1,1])G.zones.push({x:b.x+sd*16,y:b.y+30,r:19,vy:0.75,life:520,col:"#a8ff5c",kind:"gas"});