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) {
talComp.init(uuid);
}
model.initEvent();
}
// ✅ 初始化技能数据(迁移到 HeroSkillsComp

View File

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