diff --git a/cache/crop_gap.png b/cache/crop_gap.png new file mode 100644 index 0000000..a1c301b Binary files /dev/null and b/cache/crop_gap.png differ diff --git a/star-raid/js/enemies.js b/star-raid/js/enemies.js index 87fed20..8cf4bce 100644 --- a/star-raid/js/enemies.js +++ b/star-raid/js/enemies.js @@ -354,7 +354,7 @@ function bossMain(b,def,fm){ for(let i=-2;i<=2;i++)ebul(b.x+i*12,b.y+16,a0+i*0.13,2.2+0.2*ph,"orbR"); b.mainT=Math.round((ph?52:70)/fm);break; case "spawn": { // 太空原种:花弹从腹末生殖腔喷出(发射点=生殖腔摆动,与drawProgenitor同源公式);P1三波起手偏左 / P2生殖腔血光柱+翼尖花弹 - if(ph===0){const swx=Math.sin(b.t*0.055+2.8)*5.2; + if(ph===0){const swx=Math.sin(b.t*0.055+2.8)*4.8; for(let k=0;k<3;k++)for(let i=-2;i<=2;i++){ const bb=ebul(b.x+swx,b.y+34,a0+i*0.16+(k-1)*0.09+[0.2,0.1,0][k],1.5+k*0.2,"flowr",14); bb.grow=0.007;bb.maxS=2.8;bb.scale=0.9;} diff --git a/star-raid/js/render.js b/star-raid/js/render.js index 091aee1..b1f3b70 100644 --- a/star-raid/js/render.js +++ b/star-raid/js/render.js @@ -280,22 +280,22 @@ function drawProgenitor(b,t,fl,tf){ // 太空原种·装甲虫兽(tf 0=装甲 ctx.restore();} // —— 摆尾:先画在躯体下层(尾根被加长的身体覆住,无缝衔接),5节逐节相位摆动;P2节间血红肉显露+整体伸长 —— const segH=5.2+tf*1.6,gap=11; - for(let i=4;i>=0;i--){const sw=Math.sin(t*0.055+i*0.7)*(1.2+i),sy=gap+i*segH,hw=9-i*1.5; + for(let i=4;i>=0;i--){const sw=Math.sin(t*0.055+i*0.7)*(0.8+i),sy=gap+i*segH,hw=9-i*1.5; if(tf>0&&i<4){ctx.globalAlpha=tf*0.85;px(sw-hw+2,sy+segH-2,(hw-2)*2,2,"#c8202e");ctx.globalAlpha=1;} // 节间血肉环 poly([sw-hw,sy,sw+hw,sy,sw+hw-2,sy+segH,sw-hw+2,sy+segH],i%2?"#b8c8d8":"#c9d6e2"); // 尾节甲片 px(sw-hw,sy,3,segH,"#e8f0f6");px(sw+hw-3,sy,3,segH,"#8498ac"); // 左亮右暗 for(const sd of[-1,1])poly([sw+sd*(hw+1),sy+1,sw+sd*(hw+4),sy+2.5,sw+sd*(hw+1),sy+4],"#e8dcc0"); // 节侧骨刺 } - const swT=Math.sin(t*0.055+2.8)*5.2,tipY=gap+4*segH; // 尾末生殖腔(花弹发射口,与enemies.js同源公式) + const swT=Math.sin(t*0.055+2.8)*4.8,tipY=gap+4*segH; // 尾末生殖腔(花弹发射口,与enemies.js同源公式) circ(swT,tipY+2,2.6+Math.sin(t*0.11)*0.6,fl||(tf>0.5?"#ff2a3c":"#ff5566")); circ(swT,tipY+2,1.1,"#ffdfe5"); // —— 壳下血肉(常存于背甲之下,滑开才见;血红,非粉) —— if(tf>0){ctx.globalAlpha=tf*0.9; - poly([0,-36,9,-29,11,-14,8,2,5,16,0,20,-5,16,-8,2,-11,-14,-9,-29],"#c8202e"); - px(-2,-30,4,46,"#e8393a");ctx.globalAlpha=1;} + poly([0,-36,9,-29,11,-14,10,2,9,16,8,22,-8,22,-9,16,-10,2,-11,-14,-9,-29],"#c8202e"); + px(-2,-30,4,52,"#e8393a");ctx.globalAlpha=1;} // —— 背甲两瓣:沿背脊中线裂开,P2向外滑开(同一多边形平移) —— for(const sd of[-1,1]){ctx.save();ctx.translate(sd*tf*7,0); - poly([0,-40,sd*11,-37,sd*15,-28,sd*13,-12,sd*10,4,sd*6,14,0,18],sd<0?"#c9d6e2":"#9fb0c2"); + poly([0,-40,sd*11,-37,sd*15,-28,sd*13,-12,sd*12,4,sd*11,14,sd*10,20,0,20],sd<0?"#c9d6e2":"#9fb0c2"); poly([0,-40,sd*11,-37,sd*15,-28,sd*7,-26,sd*5,-36],"#e8f0f6"); // 受光斜面 for(let i=0;i<4;i++)px(sd*(4+i*2.8)-1,-24+i*9,2,5,"#5a6c80"); // 甲片板缝 const crk=Math.max(0,Math.min(1,(tf-0.15)/0.4))*10; // 裂纹随tf生长(延长,非新增)