CocosCreator入门(三) ------ 资源
详尽介绍详见官网说明:https://docs.cocos.com/creator/manual/zh/getting-started/basics/editor-panels/assets.html
- 图片资源:目前包括
jpg
、png
等图像文件,图标会显示为图片的缩略图。 脚本资源:程序员编写的 JavaScript 脚本文件,以
js
为文件扩展名。我们通过编辑这些脚本为添加组件功能和游戏逻辑。场景资源:双击可以打开的场景文件,打开了场景文件我们才能继续进行内容创作和生产。
场景管理:https://docs.cocos.com/creator/manual/zh/asset-workflow/scene-managing.html
修改场景资源自动释放策略
如果项目中的场景很多,随着新场景的切换,内存占用就会不断上升。除了使用 cc.loader.release
等 API 来精确释放不使用的资源,我们还可以使用场景的自动释放功能。要配置自动释放,可以在 资源管理器 中选中所需场景,然后在 属性检查器 中设置“自动释放资源”选项,该项默认关闭。
从当前场景切换到下一个场景时,如果当前场景不自动释放资源,则该场景中直接或间接引用到的所有资源(脚本动态加载的不算),默认都不主动释放。反之如果启用了自动释放,则这些引用到的资源默认都会自动释放。
已知问题:粒子系统的 plist 所引用的贴图不会被自动释放。如果要自动释放粒子贴图,请从 plist 中移除贴图信息,改用粒子组件的 Texture 属性来指定贴图。
防止特定资源被自动释放
启用了某个场景的资源自动释放后,如果在脚本中保存了对该场景的资源的“特殊引用”,则当场景切换后,由于资源已经被释放,这些引用可能会变成非法的,有可能引起渲染异常等问题。为了让这部分资源在场景切换时不被释放,我们可以使用 cc.loader.setAutoRelease 或者 cc.loader.setAutoReleaseRecursively 来保留这些资源。
“特殊引用”指的是以全局变量、单例、闭包、“特殊组件”、“动态资源”等形式进行的引用。“特殊组件”是指通过
cc.game.addPersistRootNode
方法设置的常驻节点及其子节点上的组件,并且这些组件中包含以字符串 URL 或 UUID,或者以除了数组和字典外的其它容器去保存的资源引用。“动态资源”指的是在脚本中动态创建或动态修改的资源。这些资源如果还引用到场景中的其它资源,则就算动态资源本身不应该释放,其它资源默认还是会被场景自动释放。
以上关于场景资源自动释放部分的内容可以归纳为下图中的几种情况:
修改场景加载策略
在 资源管理器 中,选中指定场景,可以在 属性检查器 中看到“延迟加载资源”选项,该项默认关闭。
不延迟加载资源
加载场景时,如果这个选项关闭,则这个场景直接或间接递归依赖的所有资源都将被加载,全部加载完成后才会触发场景切换。
延迟加载依赖的资源
加载场景时,如果选项开启,则这个场景直接或间接依赖的所有贴图、粒子和声音都将被延迟到场景切换后才加载,使场景切换速度极大提升。
同时,玩家进入场景后可能会看到一些资源陆续显示出来,并且激活新界面时也可能会看到界面中的元素陆续显示出来,因此这种加载方式更适合网页游戏。
使用这种加载方式后,为了能在场景中更快地显示需要的资源,建议一开始就让场景中暂时不需要显示的渲染组件(如 Sprite)保持非激活状态。
Spine 和 TiledMap 依赖的资源永远都不会被延迟加载。
修改场景资源自动释放策略
如果项目中的场景很多,随着新场景的切换,内存占用就会不断上升。除了使用 cc.loader.release
等 API 来精确释放不使用的资源,我们还可以使用场景的自动释放功能。要配置自动释放,可以在 资源管理器 中选中所需场景,然后在 属性检查器 中设置“自动释放资源”选项,该项默认关闭。
从当前场景切换到下一个场景时,如果当前场景不自动释放资源,则该场景中直接或间接引用到的所有资源(脚本动态加载的不算),默认都不主动释放。反之如果启用了自动释放,则这些引用到的资源默认都会自动释放。
已知问题:粒子系统的 plist 所引用的贴图不会被自动释放。如果要自动释放粒子贴图,请从 plist 中移除贴图信息,改用粒子组件的 Texture 属性来指定贴图。