refactor(hero): 简化伤害队列和动画处理逻辑

移除伤害队列中的冗余字段,将受击动画播放移至伤害触发时统一处理,提高代码可维护性并消除重复逻辑。
This commit is contained in:
panw
2026-03-18 16:15:37 +08:00
parent b17ec3695e
commit eceabdc65a

View File

@@ -56,8 +56,6 @@ export class HeroViewComp extends CCComp {
private damageQueue: Array<{ private damageQueue: Array<{
damage: number, damage: number,
isCrit: boolean, isCrit: boolean,
delay: number,
anm:string,
}> = []; }> = [];
private isProcessingDamage: boolean = false; private isProcessingDamage: boolean = false;
private damageInterval: number = 0.01; // 伤害数字显示间隔 private damageInterval: number = 0.01; // 伤害数字显示间隔
@@ -479,8 +477,10 @@ export class HeroViewComp extends CCComp {
// 视图层表现 // 视图层表现
let SConf=SkillSet[s_uuid] let SConf=SkillSet[s_uuid]
const hitAnm = EAnmConf[SConf?.DAnm]?.path || "atked";
if (isBack) this.back() if (isBack) this.back()
this.showDamage(damage, isCrit, SConf.DAnm); this.in_atked(hitAnm, this.model.fac==FacSet.HERO?1:-1);
this.showDamage(damage, isCrit);
} }
private isBackingUp: boolean = false; // 🔥 添加后退状态标记 private isBackingUp: boolean = false; // 🔥 添加后退状态标记
@@ -535,13 +535,10 @@ export class HeroViewComp extends CCComp {
/** 显示伤害数字 */ /** 显示伤害数字 */
showDamage(damage: number, isCrit: boolean,DAnm:number) { showDamage(damage: number, isCrit: boolean) {
let anm=EAnmConf[DAnm].path // DAnm和EAnm共用设定数组
this.damageQueue.push({ this.damageQueue.push({
damage, damage,
isCrit, isCrit,
delay: this.damageInterval,
anm
}); });
} }
@@ -552,7 +549,7 @@ export class HeroViewComp extends CCComp {
this.isProcessingDamage = true; this.isProcessingDamage = true;
const damageInfo = this.damageQueue.shift()!; const damageInfo = this.damageQueue.shift()!;
this.showDamageImmediate(damageInfo.damage, damageInfo.isCrit,damageInfo.anm); this.showDamageImmediate(damageInfo.damage, damageInfo.isCrit);
// 设置延时处理下一个伤 // 设置延时处理下一个伤
this.scheduleOnce(() => { this.scheduleOnce(() => {
@@ -561,11 +558,10 @@ export class HeroViewComp extends CCComp {
} }
/** 立即显示伤害效果 */ /** 立即显示伤害效果 */
private showDamageImmediate(damage: number, isCrit: boolean, anm:string="atked") { private showDamageImmediate(damage: number, isCrit: boolean) {
if (!this.model) return; if (!this.model) return;
this.hp_show(); this.hp_show();
this.in_atked(anm, this.model.fac==FacSet.HERO?1:-1);
if (isCrit) { if (isCrit) {
this.hp_tip(TooltipTypes.crit, damage.toFixed(0)); this.hp_tip(TooltipTypes.crit, damage.toFixed(0));
} else { } else {