fix(hero): 修复英雄属性组件事件监听未正确初始化和清理的问题
将 HeroAttrsComp 的事件监听从 onLoad/onDestroy 生命周期方法移至显式调用的 initEvent/removeEvent 方法,确保在 Hero 初始化时正确初始化事件监听,并在重置时清理事件监听,避免事件重复绑定和内存泄漏。
This commit is contained in:
@@ -93,6 +93,7 @@ export class Hero extends ecs.Entity {
|
|||||||
if (talComp) {
|
if (talComp) {
|
||||||
talComp.init(uuid);
|
talComp.init(uuid);
|
||||||
}
|
}
|
||||||
|
model.initEvent();
|
||||||
}
|
}
|
||||||
|
|
||||||
// ✅ 初始化技能数据(迁移到 HeroSkillsComp)
|
// ✅ 初始化技能数据(迁移到 HeroSkillsComp)
|
||||||
|
|||||||
@@ -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";
|
||||||
|
|||||||
Reference in New Issue
Block a user