# CocosCreator通用资源管理 **Repository Path**: myandroid008/cocosGameLoader ## Basic Information - **Project Name**: CocosCreator通用资源管理 - **Description**: CocosCreator通用资源管理 - **Primary Language**: JavaScript - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2020-06-14 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # CocosCreator通用资源管理 #### 介绍 CocosCreator通用资源管理 如果你想使用 Cocos Creator 制作一些规模稍大的游戏,那么资源管理是必须解决的问题。 #### 软件架构 软件架构说明 1. 资源管理主要解决 3 个问题,资源加载,资源使用,资源释放。 2. 手动管理资源(通过引用计数的方式实现)。 3. 使用 cc.loader.release 来释放之前加载的资源。 #### 设计思想 1. CocosCreator资源管理存在的问题 在CocosCreator中,资源统一由cc.loader来管理,大量使用prefab,prefab与各种资源复杂的引用关系增加了资源管理的难度。 例如:资源A可能依赖资源B、C、D而资源D又依赖资源E。如果使用cc.loader.loadRes("A")加载资源A,B~E都会被加载进来,但如果调用cc.loader.release("A")则只有资源 A 被释放。 每一个加载的资源都会放到cc.loader的_cache中,但cc.loader.release只是将传入的资源进行释放,而没有考虑资源依赖的情况。 如果将依赖的资源也一起释放,CocosCreator提供了一个方法:cc.loader.getDependsRecursively递归获取指定资源依赖的所有资源,放入一个数组并返回,然后在cc.loader.release中传入该数组,cc.loader会遍历它们,将其逐个释放。这种方式虽然可以将资源释放,但却有可能释放了不应该释放的资源。 2. 解决方法 使用gameLoader.loadRes() 来替代 cc.loader.loadRes(),gameLoader.releaseInstance() 来替代 cc.loader.releaseRes() 。对于依赖,在资源加载的时候gameLoader会自动建立映射,释放资源的时候会自动取消映射,并检测取消映射后的资源是否可以释放。具体的实现方法见gameLoader.js脚本。 #### 安装教程 1. 将bin目录下的脚本放入工程项目即可,位置不要求固定。 #### 使用说明 1. 所有的资源加载都必须严格使用gameLoader.js中提供的API进行管理(否则可能会产生不可名状的渲染报错)。 2. 建议对gameLoader.js再进行一次封装,前端的所有资源加载、使用、释放走通用的API,防止有些同学错误使用。 #### 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request #### 码云特技 1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md 2. 码云官方博客 [blog.gitee.com](https://blog.gitee.com) 3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解码云上的优秀开源项目 4. [GVP](https://gitee.com/gvp) 全称是码云最有价值开源项目,是码云综合评定出的优秀开源项目 5. 码云官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) 6. 码云封面人物是一档用来展示码云会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)