fix(任务组件): 修复PhaseTime可能未初始化的空指针异常
在切换任务阶段时,如果PhaseTime尚未初始化,调用reset方法会导致空指针异常。同样在组件销毁时也需要安全地清理PhaseTime。 - 在data_init中确保PhaseTime被正确初始化 - 在setPhase方法中添加空值检查 - 在reset方法中安全销毁节点并清理PhaseTime引用
This commit is contained in:
@@ -432,7 +432,9 @@ export class MissionComp extends CCComp {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 重置状态机的计时器
|
// 重置状态机的计时器
|
||||||
this.PhaseTime.reset();
|
if (this.PhaseTime) {
|
||||||
|
this.PhaseTime.reset();
|
||||||
|
}
|
||||||
|
|
||||||
switch (targetPhase) {
|
switch (targetPhase) {
|
||||||
case MissionPhase.PrepareStart:
|
case MissionPhase.PrepareStart:
|
||||||
@@ -704,6 +706,9 @@ export class MissionComp extends CCComp {
|
|||||||
* - 性能监控基准值
|
* - 性能监控基准值
|
||||||
*/
|
*/
|
||||||
data_init(){
|
data_init(){
|
||||||
|
if (!this.PhaseTime) {
|
||||||
|
this.PhaseTime = new Timer(1);
|
||||||
|
}
|
||||||
smc.mission.play = true;
|
smc.mission.play = true;
|
||||||
smc.mission.pause = false;
|
smc.mission.pause = false;
|
||||||
smc.mission.stop_mon_action = false;
|
smc.mission.stop_mon_action = false;
|
||||||
@@ -1053,6 +1058,9 @@ export class MissionComp extends CCComp {
|
|||||||
|
|
||||||
/** ECS 组件移除时销毁节点 */
|
/** ECS 组件移除时销毁节点 */
|
||||||
reset() {
|
reset() {
|
||||||
this.node.destroy();
|
this.PhaseTime = null as any;
|
||||||
|
if (this.node && this.node.isValid) {
|
||||||
|
this.node.destroy();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user