feat: 添加主角实体引用并确保跨局重置
在 SingletonModuleComp 中添加 role 字段存储主角实体引用,并在 MissionComp 任务开始时重置引用,在 Hero 销毁时清理引用。避免跨局数据残留导致引用错误。
This commit is contained in:
@@ -153,6 +153,9 @@ export class SingletonModuleComp extends ecs.Comp {
|
|||||||
[Attrs.WFUNY]: [1, 0], // 风怒率
|
[Attrs.WFUNY]: [1, 0], // 风怒率
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/** 主角实体引用 */
|
||||||
|
role: ecs.Entity | null = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 记录天赋获取
|
* 记录天赋获取
|
||||||
* @param id 天赋ID
|
* @param id 天赋ID
|
||||||
|
|||||||
@@ -31,6 +31,11 @@ export class Hero extends ecs.Entity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
destroy(): void {
|
destroy(): void {
|
||||||
|
// 如果是主角,清理全局引用
|
||||||
|
if (smc.role === this) {
|
||||||
|
smc.role = null;
|
||||||
|
}
|
||||||
|
|
||||||
// 销毁节点,防止视觉残留
|
// 销毁节点,防止视觉残留
|
||||||
const view = this.get(HeroViewComp);
|
const view = this.get(HeroViewComp);
|
||||||
if (view && view.node && view.node.isValid) {
|
if (view && view.node && view.node.isValid) {
|
||||||
@@ -86,6 +91,7 @@ export class Hero extends ecs.Entity {
|
|||||||
model.rangeType = hero.rangeType;
|
model.rangeType = hero.rangeType;
|
||||||
// 只有主角才挂载天赋组件
|
// 只有主角才挂载天赋组件
|
||||||
if (is_master) {
|
if (is_master) {
|
||||||
|
smc.role = this; // 记录主角实体引用
|
||||||
this.add(TalComp);
|
this.add(TalComp);
|
||||||
const talComp = this.get(TalComp);
|
const talComp = this.get(TalComp);
|
||||||
if (talComp) {
|
if (talComp) {
|
||||||
|
|||||||
@@ -272,6 +272,9 @@ do_ad(){
|
|||||||
this.revive_times = 1; // 每次任务开始重置复活次数
|
this.revive_times = 1; // 每次任务开始重置复活次数
|
||||||
this.spawnedSpecialIndices.clear(); // 重置特殊刷怪记录
|
this.spawnedSpecialIndices.clear(); // 重置特殊刷怪记录
|
||||||
|
|
||||||
|
// 重置全局属性加成和主角引用 (确保新一局数据干净)
|
||||||
|
smc.role = null;
|
||||||
|
|
||||||
// 重置英雄数据,确保新一局是初始状态
|
// 重置英雄数据,确保新一局是初始状态
|
||||||
smc.vmdata.hero = {
|
smc.vmdata.hero = {
|
||||||
name:'',
|
name:'',
|
||||||
|
|||||||
Reference in New Issue
Block a user