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) {
|
||||
talComp.init(uuid);
|
||||
}
|
||||
model.initEvent();
|
||||
}
|
||||
|
||||
// ✅ 初始化技能数据(迁移到 HeroSkillsComp)
|
||||
|
||||
@@ -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";
|
||||
|
||||
Reference in New Issue
Block a user