From cc60ebf332947f1138159b3b2c590bd49350dc08 Mon Sep 17 00:00:00 2001 From: panw Date: Fri, 8 May 2026 15:51:04 +0800 Subject: [PATCH] =?UTF-8?q?fix(=E4=BB=BB=E5=8A=A1=E7=BB=84=E4=BB=B6):=20?= =?UTF-8?q?=E4=BF=AE=E5=A4=8DPhaseTime=E5=8F=AF=E8=83=BD=E6=9C=AA=E5=88=9D?= =?UTF-8?q?=E5=A7=8B=E5=8C=96=E7=9A=84=E7=A9=BA=E6=8C=87=E9=92=88=E5=BC=82?= =?UTF-8?q?=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 在切换任务阶段时,如果PhaseTime尚未初始化,调用reset方法会导致空指针异常。同样在组件销毁时也需要安全地清理PhaseTime。 - 在data_init中确保PhaseTime被正确初始化 - 在setPhase方法中添加空值检查 - 在reset方法中安全销毁节点并清理PhaseTime引用 --- assets/script/game/map/MissionComp.ts | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/assets/script/game/map/MissionComp.ts b/assets/script/game/map/MissionComp.ts index 6db07d01..dd632cb3 100644 --- a/assets/script/game/map/MissionComp.ts +++ b/assets/script/game/map/MissionComp.ts @@ -432,7 +432,9 @@ export class MissionComp extends CCComp { } // 重置状态机的计时器 - this.PhaseTime.reset(); + if (this.PhaseTime) { + this.PhaseTime.reset(); + } switch (targetPhase) { case MissionPhase.PrepareStart: @@ -704,6 +706,9 @@ export class MissionComp extends CCComp { * - 性能监控基准值 */ data_init(){ + if (!this.PhaseTime) { + this.PhaseTime = new Timer(1); + } smc.mission.play = true; smc.mission.pause = false; smc.mission.stop_mon_action = false; @@ -1053,6 +1058,9 @@ export class MissionComp extends CCComp { /** ECS 组件移除时销毁节点 */ reset() { - this.node.destroy(); + this.PhaseTime = null as any; + if (this.node && this.node.isValid) { + this.node.destroy(); + } } }