fix(hero): 修复英雄属性组件事件监听未正确初始化和清理的问题

将 HeroAttrsComp 的事件监听从 onLoad/onDestroy 生命周期方法移至显式调用的 initEvent/removeEvent 方法,确保在 Hero 初始化时正确初始化事件监听,并在重置时清理事件监听,避免事件重复绑定和内存泄漏。
This commit is contained in:
walkpan
2026-02-05 08:01:34 +08:00
parent 878ca8ed77
commit ee9d72be5c
2 changed files with 4 additions and 2 deletions

View File

@@ -93,6 +93,7 @@ export class Hero extends ecs.Entity {
if (talComp) { if (talComp) {
talComp.init(uuid); talComp.init(uuid);
} }
model.initEvent();
} }
// ✅ 初始化技能数据(迁移到 HeroSkillsComp // ✅ 初始化技能数据(迁移到 HeroSkillsComp

View File

@@ -82,7 +82,7 @@ export class HeroAttrsComp extends ecs.Comp {
killed_count:number=0; killed_count:number=0;
// 注意:技能数据已迁移到 HeroSkillsComp不再存储在这里 // 注意:技能数据已迁移到 HeroSkillsComp不再存储在这里
onLoad() { initEvent() {
// 监听升级事件 // 监听升级事件
mLogger.log(this.debugMode, 'HeroAttrs', `[HeroAttrs] 注册升级事件监听`); mLogger.log(this.debugMode, 'HeroAttrs', `[HeroAttrs] 注册升级事件监听`);
oops.message.on(GameEvent.CanUpdateLv, this.onLevelUp, this); oops.message.on(GameEvent.CanUpdateLv, this.onLevelUp, this);
@@ -91,7 +91,7 @@ export class HeroAttrsComp extends ecs.Comp {
// oops.message.on(GameEvent.UseAttrCard, this.onUseAttrCard, this); // oops.message.on(GameEvent.UseAttrCard, this.onUseAttrCard, this);
} }
onDestroy() { removeEvent() {
mLogger.log(this.debugMode, 'HeroAttrs', `[HeroAttrs] 移除升级事件监听`); mLogger.log(this.debugMode, 'HeroAttrs', `[HeroAttrs] 移除升级事件监听`);
oops.message.off(GameEvent.CanUpdateLv, this.onLevelUp, this); oops.message.off(GameEvent.CanUpdateLv, this.onLevelUp, this);
// oops.message.off(GameEvent.UseItemCard, this.onUseItemCard, this); // oops.message.off(GameEvent.UseItemCard, this.onUseItemCard, this);
@@ -681,6 +681,7 @@ export class HeroAttrsComp extends ecs.Comp {
} }
reset() { reset() {
this.removeEvent();
// 重置为初始状态 // 重置为初始状态
this.hero_uuid = 1001; this.hero_uuid = 1001;
this.hero_name = "hero"; this.hero_name = "hero";