refactor(heroView): 优化英雄和怪物死亡处理逻辑

重构了realDead方法,统一添加死亡飞出屏幕动画,根据阵营区分处理逻辑:英雄移动到墓地,怪物动画结束后销毁
This commit is contained in:
panw
2026-05-21 16:34:09 +08:00
parent 654e39ff5b
commit 52b24668c7

View File

@@ -464,30 +464,34 @@ export class HeroViewComp extends CCComp {
mLogger.warn(this.debugMode, 'HeroViewComp', "[HeroViewComp] realDead called but model is null, skipping");
return;
}
// 根据阵营触发不同事件
if(this.model.fac === FacSet.MON){
}
if(this.model.fac === FacSet.HERO){
// 将英雄移到玩家看不到的墓地
this.node.setPosition(v3(-2000, -2000, 0));
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;
}
// 根据阵营决定飞出方向:英雄向左(负),怪物向右(正)
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){
// 受到攻击时更新最后更新时间