refactor(heroView): 优化英雄和怪物死亡处理逻辑
重构了realDead方法,统一添加死亡飞出屏幕动画,根据阵营区分处理逻辑:英雄移动到墓地,怪物动画结束后销毁
This commit is contained in:
@@ -464,30 +464,34 @@ export class HeroViewComp extends CCComp {
|
|||||||
mLogger.warn(this.debugMode, 'HeroViewComp', "[HeroViewComp] realDead called but model is null, skipping");
|
mLogger.warn(this.debugMode, 'HeroViewComp', "[HeroViewComp] realDead called but model is null, skipping");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// 根据阵营触发不同事件
|
|
||||||
if(this.model.fac === FacSet.MON){
|
// 隐藏UI
|
||||||
|
this.top_node.active = false;
|
||||||
}
|
|
||||||
|
// 在销毁实体前先禁用碰撞体,从源头减少"尸体"参与碰撞
|
||||||
if(this.model.fac === FacSet.HERO){
|
const collider = this.node.getComponent(Collider2D);
|
||||||
// 将英雄移到玩家看不到的墓地
|
if (collider) {
|
||||||
this.node.setPosition(v3(-2000, -2000, 0));
|
collider.enabled = false;
|
||||||
const collider = this.node.getComponent(Collider2D);
|
|
||||||
if (collider) {
|
|
||||||
collider.enabled = false;
|
|
||||||
}
|
|
||||||
// 隐藏UI
|
|
||||||
this.top_node.active = false;
|
|
||||||
} else {
|
|
||||||
// 🔥 方案B:治理性措施 - 在销毁实体前先禁用碰撞体,从源头减少"尸体"参与碰撞
|
|
||||||
const collider = this.node.getComponent(Collider2D);
|
|
||||||
if (collider) {
|
|
||||||
collider.enabled = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.ent.destroy();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 根据阵营决定飞出方向:英雄向左(负),怪物向右(正)
|
||||||
|
let isHero = this.model.fac === FacSet.HERO;
|
||||||
|
let dirX = isHero ? -800 : 800;
|
||||||
|
|
||||||
|
// 死亡往后飞出屏幕动画
|
||||||
|
tween(this.node)
|
||||||
|
.by(0.5, { position: v3(dirX, 700, 0), angle: isHero ? 360 : -360 }, { easing: "quadOut" })
|
||||||
|
.call(() => {
|
||||||
|
this.node.angle = 0; // 重置角度
|
||||||
|
if (isHero) {
|
||||||
|
// 将英雄移到玩家看不到的墓地,留待下回合上场
|
||||||
|
this.node.setPosition(v3(-2000, -2000, 0));
|
||||||
|
} else {
|
||||||
|
// 动画结束后销毁怪物实体
|
||||||
|
this.ent.destroy();
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.start();
|
||||||
}
|
}
|
||||||
do_atked(damage:number,isCrit:boolean,s_uuid:number,isBack:boolean=false){
|
do_atked(damage:number,isCrit:boolean,s_uuid:number,isBack:boolean=false){
|
||||||
// 受到攻击时更新最后更新时间
|
// 受到攻击时更新最后更新时间
|
||||||
|
|||||||
Reference in New Issue
Block a user