Boss通用移动改为随机长度往返
- 通用游走(8个Boss,钢琴站桩/突击/夺权者X专属移动保留):一左一右方向交替 - 每趟移动长度随机(普通50~105px,宽体35~80px),不再固定sin幅度 - 边界按Boss判定半径计算(minX=12+r0/maxX=W-12-r0,宽体+6),目标clamp边界内永不撞边 - 已模拟2万帧验证全部Boss不越界、方向正常交替;上下浮动与b.mt冻结约定不变
This commit is contained in:
parent
f06e31238d
commit
cbac48e468
@ -312,7 +312,16 @@ function updateBoss(){
|
|||||||
else if(b.idx===6){const usp=b.phase>=1?0.028:0.008,amp=b.phase>=1?70:44;
|
else if(b.idx===6){const usp=b.phase>=1?0.028:0.008,amp=b.phase>=1?70:44;
|
||||||
b.x=clamp(b.x+amp*usp*Math.cos(b.mt*usp),30,W-30); // 速度积分定位:换阶段参数突变也不瞬移
|
b.x=clamp(b.x+amp*usp*Math.cos(b.mt*usp),30,W-30); // 速度积分定位:换阶段参数突变也不瞬移
|
||||||
b.yA=(b.yA||8)+((b.phase>=1?12:8)-(b.yA||8))*0.05;b.y=b.ty+Math.sin(b.mt*0.011)*b.yA;} // 夺权者X:P1巨大笨重→P2紧凑灵活
|
b.yA=(b.yA||8)+((b.phase>=1?12:8)-(b.yA||8))*0.05;b.y=b.ty+Math.sin(b.mt*0.011)*b.yA;} // 夺权者X:P1巨大笨重→P2紧凑灵活
|
||||||
else{b.x=W/2+Math.sin(b.mt*0.013)*(def.wide?44:70);b.y=b.ty+Math.sin(b.mt*0.011)*(def.wide?8:12);} // 通用游走提速+上下浮动(钢琴站桩除外)
|
else{ // 通用游走:随机长度左右往返(方向交替),边界按判定半径计算不撞边
|
||||||
|
const r0=(def.rr&&def.rr[0])||def.r||20,mgn=12+(def.wide?6:0);
|
||||||
|
const minX=mgn+r0,maxX=W-mgn-r0;
|
||||||
|
if(typeof b.tx!=="number")b.tx=clamp(b.x,minX,maxX); // 落地后首帧初始化
|
||||||
|
const dx=b.tx-b.x,spd=def.wide?0.8:1.05;
|
||||||
|
if(Math.abs(dx)<=spd){b.x=b.tx; // 到达:换方向,每趟长度随机(长度不够空间时自动收敛到边界内)
|
||||||
|
const dir=dx>=0?-1:1,len=def.wide?rndi(35,80):rndi(50,105);
|
||||||
|
b.tx=clamp(b.x+dir*len,minX,maxX);}
|
||||||
|
else b.x+=Math.sign(dx)*spd;
|
||||||
|
b.y=b.ty+Math.sin(b.mt*0.011)*(def.wide?8:12);} // 上下浮动保留(钢琴站桩除外)
|
||||||
b.mt++;
|
b.mt++;
|
||||||
const fm=b.fireM*(1+0.22*b.phase);
|
const fm=b.fireM*(1+0.22*b.phase);
|
||||||
if(b.fnT>0)b.fnT--;if(b.plT>0)b.plT--;if(b.eyeT>0)b.eyeT--;if(b.hornT>0)b.hornT--;if(b.laserT>0)b.laserT--;if(b.eyeGlow>0)b.eyeGlow--;if(b.rainT>0)b.rainT--;if(b.turrT>0)b.turrT--;if(b.pedT>0)b.pedT--; // 帧级技能计时器
|
if(b.fnT>0)b.fnT--;if(b.plT>0)b.plT--;if(b.eyeT>0)b.eyeT--;if(b.hornT>0)b.hornT--;if(b.laserT>0)b.laserT--;if(b.eyeGlow>0)b.eyeGlow--;if(b.rainT>0)b.rainT--;if(b.turrT>0)b.turrT--;if(b.pedT>0)b.pedT--; // 帧级技能计时器
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user