钢琴Boss大激光:去掉上下限制+增加蓄力前摇动画

- 大激光判断:只检测水平位置(|p.x-炮塔x|<14),不再限制p.y范围
- 蓄力动画:炮塔口红光脉冲(半径2→7随进度扩大)+向下红色蓄力线(长度0→55随进度蔓延)
- 蓄力线使用ctx.globalAlpha控制透明度,蓄力过半后明显可见
This commit is contained in:
JOJO 2026-08-06 14:41:54 +08:00
parent 07e69c17ef
commit 90c31ba38d
2 changed files with 12 additions and 4 deletions

View File

@ -44,7 +44,15 @@ function drawPiano(b,t,fl,split){
for(const sd of[-1,1]){const px2=sd*(112+off0); for(const sd of[-1,1]){const px2=sd*(112+off0);
circ(px2,2,5.5,"#33436a");circ(px2-1.5,0,2.5,"#55648a"); circ(px2,2,5.5,"#33436a");circ(px2-1.5,0,2.5,"#55648a");
px(px2-1.5,4,3,8,"#1b2434"); px(px2-1.5,4,3,8,"#1b2434");
px(px2-1,10,2,3,b.pedT>0?"#ffffff":(sd<0?"#b98cff":"#43e8ff"));}} px(px2-1,10,2,3,b.pedT>0?"#ffffff":(sd<0?"#b98cff":"#43e8ff"));
// 大激光蓄力动画1秒前摇红光脉冲+向下蔓延蓄力线)
const prog=sd<0?((b.pedLasL||0)/60):((b.pedLasR||0)/60);
if(prog>0){const a=Math.min(prog,1);
ctx.save();ctx.globalAlpha=Math.min(a*0.6,0.85);
circ(px2,10,2+a*5,"#ff3355"); // 炮塔口红光脉冲,随蓄力扩大
const len=Math.floor(a*55);
if(len>1){px(px2-0.5,12,1,len,"#ff3355");} // 向下蓄力线(纹路蔓延)
ctx.restore();}}}
// —— 舰桥+雷达(随半壳滑开) —— // —— 舰桥+雷达(随半壳滑开) ——
for(const sd of[-1,1]){ctx.save();ctx.translate(sd*split*30,0); for(const sd of[-1,1]){ctx.save();ctx.translate(sd*split*30,0);
px(sd<0?-10:0,-32,10,10,"#1b2434"); px(sd<0?-10:0,-32,10,10,"#1b2434");

View File

@ -350,15 +350,15 @@ function updateBoss(){
} }
} }
const lck=(b.laserT||0)>0; // 巨宽核心激光期间压制其他攻击 const lck=(b.laserT||0)>0; // 巨宽核心激光期间压制其他攻击
// 钢琴:大炮塔惩罚激光——玩家站在炮塔正下方蓄力1秒后发射99999伤害大激光 // 钢琴:大炮塔惩罚激光——玩家站在炮塔水平正下方蓄力1秒后发射99999伤害大激光(不管上下远近,只管左右)
if(b.idx===4&&!lck){ if(b.idx===4&&!lck){
const off0=b.phase>=1?16:0,p=G.p; const off0=b.phase>=1?16:0,p=G.p;
const leftX=b.x-(112+off0),rightX=b.x+(112+off0); const leftX=b.x-(112+off0),rightX=b.x+(112+off0);
if(p.dead<=0&&Math.abs(p.x-leftX)<14&&p.y>b.y&&p.y<b.y+130){ if(p.dead<=0&&Math.abs(p.x-leftX)<14){
b.pedLasL=(b.pedLasL||0)+1; b.pedLasL=(b.pedLasL||0)+1;
if(b.pedLasL>=60){bossBeam(leftX,b.y+10,leftX,H+8,6,"#ff3355",10,40,99999,{b,ox:-(112+off0),oy:10,followX2:true});b.pedLasL=0;SFX.warn();} if(b.pedLasL>=60){bossBeam(leftX,b.y+10,leftX,H+8,6,"#ff3355",10,40,99999,{b,ox:-(112+off0),oy:10,followX2:true});b.pedLasL=0;SFX.warn();}
}else b.pedLasL=0; }else b.pedLasL=0;
if(p.dead<=0&&Math.abs(p.x-rightX)<14&&p.y>b.y&&p.y<b.y+130){ if(p.dead<=0&&Math.abs(p.x-rightX)<14){
b.pedLasR=(b.pedLasR||0)+1; b.pedLasR=(b.pedLasR||0)+1;
if(b.pedLasR>=60){bossBeam(rightX,b.y+10,rightX,H+8,6,"#ff3355",10,40,99999,{b,ox:(112+off0),oy:10,followX2:true});b.pedLasR=0;SFX.warn();} if(b.pedLasR>=60){bossBeam(rightX,b.y+10,rightX,H+8,6,"#ff3355",10,40,99999,{b,ox:(112+off0),oy:10,followX2:true});b.pedLasR=0;SFX.warn();}
}else b.pedLasR=0; }else b.pedLasR=0;