[0]laya.d3的SimpleSingletonList 疑似逻辑问题
游戏中用到了一个粒子效果,动画控制器里面在某一帧会把其中一个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。
没有找到相关结果
已邀请:
要回复问题请先登录
3 个回复
Laya_z
赞同来自:
Laya_z
赞同来自:
你海哥
赞同来自: