[0]laya.d3的SimpleSingletonList 疑似逻辑问题

QQ截图20220707112204.jpg

 
游戏中用到了一个粒子效果,动画控制器里面在某一帧会把其中一个mesh的active设置成true/false,并且动画是激活时自动播放的。
把该粒子添加到舞台加载播放,某一个条件下设置粒子active=true时,因为动画播放器是自动播放,在激活的时候会update,这时候如果realtimedatas计算出active是0的话,会直接设置这个mesh的active=false。但这个mesh可能并没有记过设置active=true的情况。
因为mesh的active=false,然后就会调用到scene的render的remove。而SimpleSingletonList会获取element的indexinlist,但由于可能并没有进过add,所以这时候获得的index是-1,SimpleSingletonList的remove会继续进过逻辑:
 
var end = this.elements[this.length];
this.elements[index] = end;
end._setIndexInList(index);
 
这时候就会把队尾的元素插到下标-1那边。
这样的情况出现第二次以上时,就会把上一次被丢到下标-1的元素丢失,从而不会渲染。表现就是某些3d元素突然不渲染了。
 
暂时的解决方案是获取indexinlist如果是-1就return。

QQ截图20220707135212.jpg

 
已邀请:

Laya_z

赞同来自:

方便提供一个能描述你问题的简单例子吗,我们看一下

Laya_z

赞同来自:

图中的解决办法是可以的,后面引擎也会同步这个修改,感谢反馈

你海哥

赞同来自:

赞!我们目前也正好遇到这个问题,正准备检查源码。结果楼主和我们一样的用法和问题,目前只有暂时修改一下源码先用着,等着官方修复了!

要回复问题请先

商务合作
商务合作