creator资源加载分为静态加载和动态加载,这里主要研究动态加载。
静态加载的资源
直接被编辑器节点树引用的资源,实例化时,引擎会自动静态加载;
对于静态引用资源(通过编辑器绑定的资源),引擎会自动统计引用计数并在计数为0时自动释放。
动态加载资源
需要动态加载的资源,一般放在resources目录下,使用cc.resources.loadAny加载,但是加载资源本质上都是通过cc.AssetsManager的pipeline加载管线进行加载的。
Creator使用管线来处理整个资源加载流程,这样解耦了资源处理流程,也方便我们自定义整个加载流程。下面是一个加载管线的简易流程图:
AssetManager内置了3条管线,普通的加载管线、预加载、以及资源路径转换管线。
pipeline用于正常加载,用到了下载器(downloader)和解析器(parser)。
fetchPipeline用于预加载,用到了下载器。
transformPipeline用于转换资源路径,找到真实的资源路径,位正常加载管线和预加载管线服务。
动态加载的resources资源,在选择自动释放时只需要开发者维护好资源的引用计数就好了,Creator 会根据引用计数自动进行释放。而当项目中使用了更复杂的资源释放机制时,可以调用 Asset Manager 的相关接口来手动释放资源。
实践建议
主动释放:动态加载的资源在不需要时,可以主动释放掉(注意依赖列表)。
运用动态加载:非必要的资源不要直接通过层级管理器加到场景里,这部分资源属于静态加载的资源,Cocos会在这些资源都加载完才显示游戏画面。当静态资源很多时,黑屏事件会持续很久,所以可以运用动态加载的方式避免长时间黑屏。