From 99117146282abeb4689eb15d435c151cad9af8b1 Mon Sep 17 00:00:00 2001 From: JOJO <1498581755@qq.com> Date: Wed, 5 Aug 2026 22:58:55 +0800 Subject: [PATCH] =?UTF-8?q?=E9=BB=91=E7=9F=B3=E8=A6=81=E5=A1=9E=E9=87=8D?= =?UTF-8?q?=E5=81=9A=EF=BC=9A=E4=BA=94=E7=AE=AD=E5=A4=B4=E6=9E=84=E9=80=A0?= =?UTF-8?q?+=E4=B8=AD=E5=A4=AE=E5=B0=96=E9=A1=B6+=E7=BC=93=E6=85=A2?= =?UTF-8?q?=E6=97=8B=E8=BD=AC=EF=BC=8C=E4=BA=8C=E9=98=B6=E6=AE=B5=E5=A4=96?= =?UTF-8?q?=E5=A3=B3=E5=BE=AE=E5=BC=80=E9=9C=B2=E5=86=85=E5=85=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 五个箭头形构造(72°均布)+中心区+哥特尖顶;整体0.0032rad/帧缓慢旋转 - 光矛改为五臂轮换(armC%5与+2),发射点经src.arm机制精确跟随旋转臂尖 - 二阶段:五个箭头外壳向外微移+中心区两瓣外壳滑开,露出壳下常存的绿色内芯(无凭空出现) --- js/combat.js | 4 +++- js/enemies.js | 8 ++++---- js/render.js | 26 ++++++++++++++++---------- 3 files changed, 23 insertions(+), 15 deletions(-) diff --git a/js/combat.js b/js/combat.js index 1d31c0f..434143b 100644 --- a/js/combat.js +++ b/js/combat.js @@ -254,7 +254,9 @@ function collide(){ } // Boss光束:预警后伤害(点-线段距离判定,每束有命中冷却) for(const bm of G.bbeams){ - if(bm.src&&G.boss&&bm.src.b===G.boss){bm.x1=G.boss.x+bm.src.ox;bm.y1=G.boss.y+bm.src.oy;if(bm.src.followX2)bm.x2=bm.x1;} // 发射点跟随Boss炮台 + if(bm.src&&G.boss&&bm.src.b===G.boss){let ox=bm.src.ox||0,oy=bm.src.oy||0; + if(bm.src.arm!==undefined){const ra=G.boss.t*0.0032+bm.src.arm*TAU/5;ox=Math.sin(ra)*31;oy=-Math.cos(ra)*31;} // 黑石要塞:臂尖随整体旋转 + bm.x1=G.boss.x+ox;bm.y1=G.boss.y+oy;if(bm.src.followX2)bm.x2=bm.x1;} // 发射点跟随Boss炮台 if(bm.tele>0){bm.tele--;continue;} bm.life--; if(bm.cd>0)bm.cd--; diff --git a/js/enemies.js b/js/enemies.js index f897518..cee8559 100644 --- a/js/enemies.js +++ b/js/enemies.js @@ -330,11 +330,11 @@ function bossMain(b,def,fm){ b.rokC=(b.rokC||0)+1; if(b.rokC%(ph?2:3)===0){const mb=ebul(b.x,b.y+26,a0,1.05,"orbO",26);mb.scale=2.4;mb.r=6;SFX.warn();} b.mainT=Math.round((ph?80:95)/fm);break; - case "blackstone": { // 黑石要塞:四臂光矛成对轮换(臂尖跟随);P2周期性亚空间主炮(压制其他攻击) + case "blackstone": { // 黑石要塞:五箭头臂光矛轮换(臂尖随缓慢旋转跟随);P2周期性亚空间主炮(压制其他攻击) b.armC=(b.armC||0)+1; - const opA=ph>=1?1:0,arms=[]; - for(let k=0;k<4;k++){const a=k*Math.PI/2+(1-opA)*Math.PI/4;arms.push([Math.sin(a)*30,-Math.cos(a)*30]);} - for(const ai of(b.armC%2?[1,3]:[0,2]))bossBeam(b.x+arms[ai][0],b.y+arms[ai][1],b.x+arms[ai][0]*1.5,H+8,3.5,"#5cff9d",20,22,18,{b,ox:arms[ai][0],oy:arms[ai][1]}); + const rot=b.t*0.0032,arms=[]; + for(let k=0;k<5;k++){const a=rot+k*TAU/5;arms.push([Math.sin(a)*31,-Math.cos(a)*31]);} + for(const ai of[b.armC%5,(b.armC+2)%5])bossBeam(b.x+arms[ai][0],b.y+arms[ai][1],b.x+arms[ai][0]*1.5,H+8,3.5,"#5cff9d",20,22,18,{b,arm:ai}); b.mainT=Math.round(66/fm); if(ph>=1&&(!b.plT||b.plT<=0)){bossBeam(b.x,b.y+8,b.x,H+8,16,"#5cff9d",46,70,28,{b,ox:0,oy:8,followX2:true}); b.laserT=120;b.plT=Math.round(380/fm);SFX.warn();} diff --git a/js/render.js b/js/render.js index de02fff..62bee9c 100644 --- a/js/render.js +++ b/js/render.js @@ -126,18 +126,24 @@ function drawBoss(){ ctx.globalAlpha=0.35+0.45*op; px(-22,-26,3,cl,fl||"#ff5a2a");px(8,-16,3,cl*0.8,fl||"#ff5a2a");px(-6,0,3,cl*0.6,fl||"#ff5a2a"); ctx.globalAlpha=1;} - }else if(b.idx===9){ // 黑石要塞:四臂石构星堡;二阶段臂自X连续旋为十字、核心充能 + }else if(b.idx===9){ // 黑石要塞:五个箭头构造+中央尖顶,整体缓慢旋转;二阶段外壳微微打开露内光 const op=mp!==null?mp:(ph2>=1?1:0); - for(let k=0;k<4;k++){const a=k*Math.PI/2+(1-op)*Math.PI/4; - ctx.save();ctx.rotate(a); - poly([-6,2,6,2,3,-30,-3,-30],"#1c2230"); // 黑石臂 - px(-4,-24,8,3,"#2e3a4e");px(-4,-14,8,3,"#2e3a4e"); // 石纹 - px(-2,-33,4,5,fl||"#5cff9d"); // 臂尖绿晶 + ctx.save();ctx.rotate(t*0.0032); // 整体缓慢旋转(光矛臂尖同步跟随) + for(let k=0;k<5;k++){ctx.save();ctx.rotate(k*TAU/5); + poly([-7,3,-3,-23,0,-29,3,-23,7,3,3,5,-3,5],"#2fae6a"); // 箭头内芯荧光(壳下常存) + ctx.save();ctx.translate(0,-op*4); // 二阶段外壳向外微移露缝 + poly([-9,2,-4,-25,0,-31,4,-25,9,2,4,6,-4,6],"#1c2230"); // 黑石外壳 + px(-2,-26,4,11,"#2e3a4e"); // 壳面石纹 + ctx.restore(); ctx.restore();} - poly([0,-17,12,-12,17,0,12,12,0,17,-12,12,-17,0,-12,-12],"#141a26"); // 八角石核 - poly([0,-17,12,-12,17,0,12,12,0,17,0,17],"#0d1119"); // 背光面 - const cw=4+op*3; // 核心绿瞳充能放大 - circ(0,0,cw+3,"#1f6a44");circ(0,0,cw,fl||"#5cff9d");circ(0,0,Math.max(1,cw*0.45),"#d6ffe8"); + ctx.restore(); + circ(0,0,6,"#1f6a44");circ(0,0,3.5,fl||"#5cff9d"); // 中心内芯(壳下常存) + for(const sd of[-1,1]){ctx.save();ctx.translate(sd*op*3,0); // 中心区外壳两瓣微开 + poly([0,-14,sd*12,-10,sd*14,0,sd*12,10,0,14],"#141a26"); + ctx.restore();} + poly([-4,-12,4,-12,2,-38,-2,-38],"#1c2230"); // 中央尖顶(哥特塔) + px(-3,-31,6,3,"#2e3a4e");px(-3,-22,6,3,"#2e3a4e"); + px(-1,-41,2,4,fl||"#5cff9d"); // 尖顶绿晶 }else if(b.idx===10){ // 泰伦母舰:生物质长舰+前触手;二阶段背甲滑开露荧光器官、触手伸长 const op=mp!==null?mp:(ph2>=1?1:0); const tl=13+op*11; // 触手连续伸长