夺权者X二次重设计+魔碟修正:①去眼睛改机械反应环(外环+旋转弧段+内芯搏动,非生物眼);P1加厚加宽(三段式宽塔+指挥塔+机腹炮列+装甲铆钉)做霸气;P2改粗壮宽翼战机(翼展±30后掠翼+蓝灯带+厚机身+三引擎),不再细瘦。②魔碟节间红发光条径向对齐+能量窗随扇区角度旋转+三壳板左右镜像对称。仅语法检查通过,未运行验证
This commit is contained in:
parent
10e5744da7
commit
14647da88b
@ -76,33 +76,55 @@ function drawPiano(b,t,fl,split){
|
||||
ctx.beginPath();ctx.arc(kx,28,2+3.5*pr,0,TAU);ctx.fill();
|
||||
ctx.globalAlpha=1;}}
|
||||
}
|
||||
/* ---- 夺权者X:P1三层阶梯甲板母舰(巨大笨重)→ P2抛甲板露紧凑钻石机身(小巧灵活) ----
|
||||
变形=甲板整体抛离旋转飞走(带轨迹,爆甲原则)+紧凑机身渐显(壳下常存);参考血条观察:P1大→P2小 */
|
||||
/* ---- 夺权者X:P1三层阶梯甲板母舰(巨大厚重)→ P2抛甲板露粗壮宽翼战机(紧凑但不细瘦) ----
|
||||
无眼睛设计(机械反应环,非生物眼);变形=甲板整体抛离旋转飞走+机身渐显(壳下常存) */
|
||||
function drawUsurper(b,t,fl,ph2,mp){
|
||||
const jt=mp||0;
|
||||
// —— P2紧凑钻石机身(壳下常存,mp渐显;瞳孔追玩家;双引擎尾焰=灵活感) ——
|
||||
// —— P2粗壮宽翼战机(壳下常存,mp渐显;宽翼+厚机身+三引擎,绝不细瘦) ——
|
||||
if(ph2>=1){const di=mp!==null?mp:1;
|
||||
ctx.save();ctx.globalAlpha=di;const ds=0.7+0.3*di;ctx.scale(ds,ds);
|
||||
poly([0,46,-11,6,-7,-30,0,-40,7,-30,11,6],"#e8f4ff");
|
||||
poly([0,46,11,6,7,-30,0,-40],"#9fb0c6");
|
||||
poly([-7,-28,-26,-38,-20,-22,-7,-25],"#c0cddd");poly([7,-28,26,-38,20,-22,7,-25],"#c0cddd");
|
||||
circ(0,-12,6.5,fl||"#43b8ff");circ(0,-12,3.5,"#bfefff");
|
||||
circ(clamp((G.p.x-b.x)*0.03,-2,2),-12,1.6,"#0a2a44"); // 瞳孔追玩家
|
||||
px(-1.5,-30,3,14,"#43b8ff");px(-1.5,-2,3,26,"#43b8ff");
|
||||
for(const sd of[-1,1])px(sd*5-1.5,-44-(t%4),3,3+(t%4),t%6<3?"#7fd8ff":"#43b8ff"); // 引擎尾焰抖动
|
||||
for(const sd of[-1,1]){ // 后掠宽翼(翼展±30)
|
||||
poly([sd*11,0,sd*28,-13,sd*32,-7,sd*13,8],"#c9d6e2");
|
||||
poly([sd*11,0,sd*28,-13,sd*26,-10,sd*12,3],"#e8f4ff"); // 翼面受光
|
||||
drawSeg(sd*12,-1,sd*27,-11,2,"#43b8ff",0.9); // 前缘蓝灯带
|
||||
px(sd*28-2,-13,4,3,"#ff9a3d"); // 翼尖橙标识
|
||||
px(sd*12,4,3,3,"#ff3355");} // 翼根红炮口
|
||||
poly([0,32,-13,16,-11,-18,-6,-32,6,-32,11,-18,13,16],"#e8f4ff"); // 粗壮机身
|
||||
poly([0,32,13,16,11,-18,6,-32,0,-32],"#9fb0c6");
|
||||
px(-11,-18,22,2,"#5a6c80");px(-9,-6,18,2,"#5a6c80"); // 装甲板缝
|
||||
px(-13,16,26,3,"#ffffff"); // 底缘受光(粗边框感)
|
||||
// 中央反应环(机械环非眼睛:外环+旋转弧段+内芯搏动)
|
||||
circ(0,-10,7,"#0d2244");
|
||||
ctx.strokeStyle=fl||"#43b8ff";ctx.lineWidth=2;ctx.beginPath();ctx.arc(0,-10,7,0,TAU);ctx.stroke();
|
||||
for(let k=0;k<3;k++){const ra=t*0.03+k*TAU/3;
|
||||
ctx.beginPath();ctx.arc(0,-10,7,ra,ra+0.8);ctx.stroke();}
|
||||
circ(0,-10,3+Math.sin(t*0.1)*0.5,"#bfefff");
|
||||
if(b.laserT>0){ctx.globalAlpha=di*0.5;circ(0,-10,10,"#7ce9ff");ctx.globalAlpha=di;} // 巨宽激光期高亮
|
||||
for(const sd of[-1,1]){px(sd*5-2,-34,4,3,"#5a6c80"); // 三引擎尾焰
|
||||
px(sd*5-1.5,-38-(t%4),3,3+(t%4),t%6<3?"#7fd8ff":"#43b8ff");}
|
||||
px(-1.5,-34,3,3,"#5a6c80");px(-1,-39-(t%4),2,2+(t%4),"#7fd8ff");
|
||||
ctx.restore();ctx.globalAlpha=1;}
|
||||
// —— P1巨舰(变形=甲板抛离飞走+舰体淡出) ——
|
||||
if(ph2===0||mp!==null){const hullA=1-jt;
|
||||
if(hullA>0.02){ctx.save();ctx.globalAlpha=hullA;
|
||||
// 主舰体:三段层叠塔
|
||||
poly([0,34,-16,10,-13,-24,-7,-38,7,-38,13,-24,16,10],"#d8e4f0");
|
||||
poly([0,34,16,10,13,-24,7,-38,0,-38],"#9fb0c6");
|
||||
px(-13,-24,26,2,"#5a6c80");px(-11,-8,22,2,"#5a6c80"); // 层间板缝
|
||||
px(-16,10,32,3,"#e8f4ff"); // 底缘受光
|
||||
// 蓝色大眼核心(同心3层+瞳孔追踪;巨宽激光期高亮)
|
||||
circ(0,-14,8,"#0d2244");circ(0,-14,6.5,fl||"#43b8ff");circ(0,-14,3.2,"#bfefff");
|
||||
circ(clamp((G.p.x-b.x)*0.03,-2.5,2.5),-14,1.5,"#0a2a44");
|
||||
if(b.laserT>0){ctx.globalAlpha=hullA*0.5;circ(0,-14,10,"#7ce9ff");ctx.globalAlpha=hullA;}
|
||||
// 主舰体:三段式宽塔(厚重霸气)
|
||||
poly([0,36,-24,14,-20,-14,-12,-36,12,-36,20,-14,24,14],"#d8e4f0");
|
||||
poly([0,36,24,14,20,-14,12,-36,0,-36],"#9fb0c6");
|
||||
px(-24,14,48,3,"#e8f4ff"); // 底缘受光
|
||||
px(-20,2,40,2,"#5a6c80");px(-16,-14,32,2,"#5a6c80");px(-12,-24,24,2,"#5a6c80"); // 层间板缝
|
||||
for(let k=0;k<6;k++)px(-18+k*7,-1,2,2,"#8a9ab8"); // 装甲铆钉
|
||||
// 指挥塔(顶部)+天线
|
||||
px(-8,-44,16,8,"#c9d6e2");px(-5,-50,10,6,"#9fb0c6");
|
||||
px(-1,-56,2,6,"#5a6c80");px(-1.5,-58,3,2,t%30<15?"#ff3355":"#7a1622");
|
||||
// 中央反应环(机械环非眼睛:外环+旋转弧段+内芯搏动)
|
||||
circ(0,-6,9,"#0d2244");
|
||||
ctx.strokeStyle=fl||"#43b8ff";ctx.lineWidth=2;ctx.beginPath();ctx.arc(0,-6,9,0,TAU);ctx.stroke();
|
||||
for(let k=0;k<3;k++){const ra=t*0.02+k*TAU/3;
|
||||
ctx.globalAlpha=hullA*0.85;ctx.beginPath();ctx.arc(0,-6,9,ra,ra+0.7);ctx.stroke();ctx.globalAlpha=hullA;}
|
||||
circ(0,-6,4+Math.sin(t*0.08)*0.6,"#bfefff");
|
||||
if(b.laserT>0){ctx.globalAlpha=hullA*0.5;circ(0,-6,12,"#7ce9ff");ctx.globalAlpha=hullA;}
|
||||
// 机腹炮列(红色炮口一排)
|
||||
for(let k=-2;k<=2;k++)px(k*8-1.5,18,3,4,"#ff3355");
|
||||
// 引擎列(顶部4喷口,焰长抖动)
|
||||
for(let e=0;e<4;e++){const ex2=-12+e*8;
|
||||
px(ex2-2,-40,4,3,"#5a6c80");
|
||||
@ -118,6 +140,7 @@ function drawUsurper(b,t,fl,ph2,mp){
|
||||
poly([sd*8,dy-5,sd*(dw+8),dy,sd*(dw+4),dy+3,sd*8,dy+1],"#e8f4ff"); // 甲板面受光
|
||||
px(sd*(dw+2)-2,dy+2,4,2,t%50<25?"#7fd8ff":"#2a5a78"); // 板缘蓝灯带(明灭)
|
||||
px(sd*(dw-8)-2,dy+4,4,3,"#ff9a3d"); // 橙色标识块
|
||||
px(sd*14-1,dy+1,10,1,"#5a6c80"); // 甲板板缝
|
||||
for(let g=0;g<2+L;g++){const gx=sd*(14+g*10); // 红色炮口(deckVolley前摇:最下层逐个点亮)
|
||||
const glow=b.deckT>0&&L===2&&(26-b.deckT)>g*6;
|
||||
px(gx-1,dy+7,3,3,glow?"#ffffff":"#ff3355");}
|
||||
@ -143,9 +166,11 @@ function drawSaucer(b,t,fl,ph2,mp){
|
||||
poly([0,-19,6,-14,4,-8,-4,-8,-6,-14],k%2?"#241430":"#2a1a3a"); // 扇区装甲(明暗交替)
|
||||
px(-0.5,-19,1,11,open>0?"#ff3355":"#7a1622"); // 扇区间裂纹(P2转亮红)
|
||||
ctx.restore();}
|
||||
for(let k=0;k<8;k++){const a=(k+0.5)*TAU/8; // 红色六边形能量窗(呼吸明灭,P2+更亮)
|
||||
for(let k=0;k<8;k++){const a=(k+0.5)*TAU/8; // 红色六边形能量窗(随扇区角度旋转,呼吸明灭)
|
||||
ctx.globalAlpha=(0.3+0.3*Math.sin(t*0.08+k*1.1))*(0.5+0.5*eyeG);
|
||||
circ(Math.sin(a)*12.5,-Math.cos(a)*12.5,2.2,"#ff3355");ctx.globalAlpha=1;}
|
||||
ctx.save();ctx.translate(Math.sin(a)*12.5,-Math.cos(a)*12.5);ctx.rotate(a);
|
||||
px(-2,-1,4,2,"#ff3355");px(-1,-2,2,4,"#ff3355");
|
||||
ctx.restore();ctx.globalAlpha=1;}
|
||||
ctx.restore();
|
||||
// —— 眼窝(常存)+紫红魔眼(P2点亮;竖瞳追踪玩家,P3瞳孔收成竖缝) ——
|
||||
px(-11,-5,7,6,"#241430");px(4,-5,7,6,"#241430");
|
||||
@ -164,13 +189,14 @@ function drawSaucer(b,t,fl,ph2,mp){
|
||||
ctx.beginPath();ctx.arc(0,0,R,sa0,sa1);ctx.stroke();
|
||||
ctx.strokeStyle="#55336e";ctx.lineWidth=4.5;
|
||||
ctx.beginPath();ctx.arc(0,0,R,sa0,sa1);ctx.stroke();}
|
||||
for(let k=0;k<5;k++){const ag=a0+(k+1)*(a1-a0)/6; // 节间红发光条(呼吸明灭)
|
||||
for(let k=0;k<5;k++){const ag=a0+(k+1)*(a1-a0)/6; // 节间红发光条(径向对齐,呼吸明灭)
|
||||
ctx.globalAlpha=0.45+0.4*Math.sin(t*0.09+k);
|
||||
px(Math.cos(ag)*R-1,Math.sin(ag)*R-4,2,8,"#ff3355");ctx.globalAlpha=1;}
|
||||
ctx.save();ctx.translate(Math.cos(ag)*R,Math.sin(ag)*R);ctx.rotate(ag);
|
||||
px(-4,-1,8,2,"#ff3355");ctx.restore();ctx.globalAlpha=1;}
|
||||
const hL=3+open*26; // 半环下端伸长变尖:圆环下半部分延续为朝下的锥刺(同一几何体)
|
||||
poly([-6.5,R,6.5,R,2.5,R+hL*0.55,0,R+hL,-2.5,R+hL*0.55],"#2a1a3a");
|
||||
poly([-3.5,R,3.5,R,1.2,R+hL*0.5,0,R+hL*0.8,-1.2,R+hL*0.5],"#55336e");
|
||||
for(let k=0;k<3;k++){const aa=a0+(0.35+k*0.2)*(a1-a0);
|
||||
for(let k=0;k<3;k++){const aa=a0+(sd<0?0.35+k*0.2:0.65-k*0.2)*(a1-a0); // 左右半环镜像对称
|
||||
const rx=Math.cos(aa),ry=Math.sin(aa),tx2=-ry,ty2=rx;
|
||||
const bl=2+9*fo; // 铆钉→尖刺连续伸长
|
||||
poly([rx*(R+5)+tx2*2.5,ry*(R+5)+ty2*2.5, rx*(R+5)-tx2*2.5,ry*(R+5)-ty2*2.5, rx*(R+5+bl),ry*(R+5+bl)],fo>0.6?(fl||"#ff3355"):"#241430");
|
||||
|
||||
Loading…
Reference in New Issue
Block a user