[]场景切换造成的FPS下降的优化思路请教

现在不同场景都是继承的Sprite,原来是通过addChild和removeChild直接管控不同场景的显示和隐藏的,但是发现发布到手机后FPS会瞬间掉到个位数,然后再恢复到原来一样。今天想到能否使用visible直接控制显示隐藏,发现这样做的确有很好的效果。看代码addChild里面有很多层级调整和其他绘制的代码,虽然没太细看,但是想咨询下这两种处理方式有这么大的差距是否正常,还是我本身的优化思路就有问题。还有我的Sprite和drawcall数量都在100以下,只有在战斗时才会飚上去不过目前还没导致卡顿。郁闷的就是Sprite和drawcall都正常,但是FPS会变,这个会是啥原因
已邀请:

yurong3000

赞同来自: cuixueying

总结的yung的回复如下:
1、sprite remove和visible差不多,都不会渲染,但是visible=false会产生节点遍历,remove会产生数组操作,都是有消耗的,如果长期不显示,建议remove,如果频繁,建议visible

2、sprite和drawcall都不变,fps也会受图片加载解析上传显卡,自定义的复杂逻辑等影响。fps是和js执行时间有密切关系,不仅仅是sprite数量和draw影响

3、在场景实例化完成后,在使用visible做显示和隐藏的切换时不会重新上传图片,但是顶点这些信息还是会上传给显卡,其实每帧都在上传这部分信息
 

cuixueying

赞同来自:

移除一个界面,需要同时移除自身removeSelf,事件removeEvent,子对象removeChildren,其中removeEvent是个函数,包括当前类所有事件监听的移除,大致如下
/**销毁**/
private function dispose():void
{
this.removeEvent();
this.removeChildren();
this.removeSelf();
}
visible(非可见区域的对象尽量从显示列表移除或者设置visible=false。),设置为visible=false的显示对象,将不会再进行渲染提交,相当于从现实列表移除了!

该问题目前已经被锁定, 无法添加新回复

商务合作
商务合作