-
Creator 版本:2.0.5
-
目标平台: Web
我把使用cc.loader.loadRes的资源设置为cc.loader.setAutoReleaseRecursively(assert, true);
发现cc.loader._cache中在切换场景中是被释放了,但是问题来了,切换场景的时候黑屏好久,是不是刷新了一次render变成默认了,哪怕是不刷新停留在原界面也是好的啊
尝试了常驻节点,也有问题,求解决思路
Creator 版本:2.0.5
目标平台: Web
我把使用cc.loader.loadRes的资源设置为cc.loader.setAutoReleaseRecursively(assert, true);
发现cc.loader._cache中在切换场景中是被释放了,但是问题来了,切换场景的时候黑屏好久,是不是刷新了一次render变成默认了,哪怕是不刷新停留在原界面也是好的啊
尝试了常驻节点,也有问题,求解决思路
是否可以切换到下一个场景再去做释放?毕竟场景加载需要点时间的,对于复杂的场景,更是如此。还有你可以把场景细分,做成几个prefab动态加载,优化场景的显示速度。
setAutoReleaseRecursively以后,是引擎调用loadScene的时候选择的释放时机吧
已经把spine,icon,子界面,都是通过prefab动态加载了,否则一个scene完整加载肯定吃不消
其实我试过 cc.loader.loadRes后不使用setAutoReleaseRecursively,并且不勾选场景自动释放还稍微好一些,但是还是有一瞬间的黑屏。
黑屏是因为场景被切换后,新场景的资源还未完全加载,如果你是大场景,节点数据的解析也要一定时间,不黑屏也会出现加载卡顿的情况,建议还是要根据自己的情况,对界面进行细化分离和合理安排资源的分布加载时机。
我已经使用cc.director.preloadScene进行了处理后再进行loadScene的操作了。好吧,也谢谢了。黑屏问题很多帖子我都看了,都是不了了之。希望以后能有比较好的解决方案。
在新的场景渲染完成后,再去释放上一个场景的资源。
@虣虣
恩,先这么做了。谢谢~
我记得以前 Creator 是没这个问题的。资源的释放和新场景的载入,是在一帧内完成的,这一帧不论怎么卡,都不会在卡顿结束前进行渲染才对,所以不应该变成黑屏。
释放场景是阻断的 JS 执行过程,引擎不会在中途做 gl clear 之类的操作,感觉是浏览器在刷新 frame buffer,这个可能是具体浏览器底层行为导致的,有一个 gl option 可能和这个问题有关系:preserveDrawingBuffer,我们没有默认开启,因为这个 option 会导致在一些其他浏览器上的帧乱序问题
蛋疼,开启这个 flag 后,在某些浏览器上可能会表现为渲染的帧顺序不对,连续动画看起来就可能会有一些跳动。
难道要把这个 flag 重新开启么?其它小伙伴有更好的解决方法吗?
切换场景的中间难道不用loading界面的吗?
用单场景,其他场景都做成预制体
肯定有loading,用preloadScene进行预加载的,但是加载完后再调用loadScene,是调用runSceneImmediate的时候黑屏
呵呵,但是这样setAutoReleaseRecursively这些设计出来意义就不大了,scene几乎就是不能商用了
没办法的办法了