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"});