android端播放粒子特效闪退,mac编辑器以及浏览器中不会闪退

用的是cocos creator3.8.6版本。

动态创建32个这样的粒子后,在android设备上闪退了。后续改成8个这样的粒子,还是会闪退。然后我就把挂粒子的节点都给active设置为false了,但是玩着玩着还是会闪退。没啥头绪。

以下是android studio中的报错信息:

cocos-engine/native/cocos/2d/renderer/RenderEntity.cpp:104: void cc::RenderEntity::setStaticDrawInfoSize(uint32_t): assertion "_renderEntityType == RenderEntityType::STATIC && size <= RenderEntity::STATIC_DRAW_INFO_CAPACITY" failed

Fatal signal 6 (SIGABRT), code -1 (SI_QUEUE) in tid 21852 (Thread-2), pid 21823

我这边也一样,感觉就是粒子的节点active 修改导致的

感觉带有粒子的节点重用并且修改active 安卓上运行一段时间就会闪退

我后来把包含粒子的节点都移除了,发现还是会闪退,很是奇怪。于是我回滚到美术第一次提交的节点,刚开始不会闪退,随着游玩时间的增加,后面还是会闪退。今天我排查下,如果有新进展会在论坛同步,刚用cocos不太了解他这个机制

找到问题了。
我这边是,有个需求,玩家分数达到不同等级时,要播不同的粒子特效。
一个节点下挂了5个粒子节点,最开始的写法:

for (let i = 0; i < this.particleNodes.length; i++){
    this.particleNodes[i].active = false;
}
this.particleNodes[target].active = true;

这种写法会导致android端直接闪退。
但如果这么写:

for (let i = 0; i < this.particleNodes.length; i++){
    if (i === target){
        this.particleNodes[i].active = true;
    }else{
        this.particleNodes[i].active = false;
    }
}

这么写就不会闪退。

也就是说,如果你前一行把这个节点的active设置为false,下一行代码又给改成true了,就会导致闪退。

1赞

应该是是这个问题,我这边也是在短时间内不一定是同一帧内active设置true和false 大概率闪退

我也报这个错。 复现办法是 设置一个按钮,让粒子特效的根节点删除,添加。四五次之后就报这个错崩溃了。 然后尝试了删除后,克隆一个新的添加,老的destroy掉。 点了上百次按钮往复增删都没有崩溃了。

不知道是不是这个问题,3.8.6构建出来的鸿蒙项目运行报错

路径在这里 /Applications/Cocos/Creator/3.8.6/CocosCreator.app/Contents/Resources/resources/3d/engine/cocos/2d/assembler/graphics/webgl/impl.ts

你可以看看

1赞

我们项目也出现了,就是这个问题

直接用3.8.7,以修复此问题。