cocos-engine icon indicating copy to clipboard operation
cocos-engine copied to clipboard

在带Mask节点的onEnable生命周期函数中修改Mask.type报错

Open LyneXiao opened this issue 5 months ago • 0 comments

Cocos Creator version

3.8.6

System information

Windows 10 Editor

Issue description

如题,在使用FairyGUI中使用Sprite自定义遮罩时发现该错误。大概逻辑是:

  1. 在Mask组件onLoad时,会创建默认的Graphics遮罩组件;
  2. 在延时显示节点时,引擎源码会收集所有组件实例到一个列表中,相关代码: this._activateNodeRecursively(node, task.preload, task.onLoad, task.onEnable); task.preload.invoke(); task.onLoad.invoke(); task.onEnable.invoke();
  3. FairyGUI在某组件的onEnable函数中触发了Mask的类型修改,修改为了Sprite类型的遮罩。在引擎源码中,这里会将原Graphics立即销毁,相关源码this._graphics._destroyImmediate();
  4. 在调用task.onEnable.invoke();时由于Graphics实例已被实时销毁,导致异常。

this._graphics._destroyImmediate();的调用在mask类型切换时似乎并不必须,请确认该问题并优化此处的逻辑

Relevant error log output

No response

Steps to reproduce

如上所述

Minimal reproduction project

No response

LyneXiao avatar Jun 10 '25 06:06 LyneXiao