cocoscreator资源管理assetmanager

LANGZI7758521 LANGZI7758521     2022-12-12     567

关键词:

版本:2.4.0

cocos的资源管理初用真的很难。靠依赖关系去加载,释放,往往不灵活,得不到想要的结果。

Egret资源管理做得很好,有可视化管理工具,资源分组加载,动态加载之类都比较灵活。解决了1个资源被多个资源组引用,只释放一个资源组,共享资源不会被释放等等问题。

Laya也是靠的依赖关系,也不灵活。朋友的Laya项目都是自己写的资源管理类,将资源罗列成一个个资源组,自己计数,和释放。区别Egret就是Egret有可视化工具,Laya得自己手写。

Cocos也靠的依赖关系,也不灵活。另一个cocos的项目组,直接复制的Egret的RES过去用。

cocos新版2.4.0增加了Asset Bundle。现在学着试试。

 
一 场景加载和释放

预加载,很少用。后台静默加载,加载完成并不会运行,需要手动切换。

cc.director.preloadScene("MyScene", function ()   );

加载并直接运行场景。 加载场景以及依赖资源完成后,就直接运行了。切换场景时,旧场景会自动被destroy()。

//显示loading动画
cc.director.loadScene("MyScene",()=>
    //隐藏loading动画
);

新版本增加了以下方式,先通过asset bundle加载,然后再运行。

bundle.loadScene('MyScene', function (err, scene)
    cc.director.runScene(scene);
);

cc.director源码位置:D:\\Tool\\CocosDashboard\\resources\\.editors\\Creator\\2.4.0\\resources\\engine\\cocos2d\\core\\CCDirector.js

以上加载场景,都是根据依赖关系。场景中没有使用的资源,不会被加载。

比如场景中有1个角色,1个怪物,10个json配置需要动态创建,那只能动态加载再创建,想要随着场景加载一起,就必须把怪物和角色和场景挂钩,引用prefab或者直接放场景上。

而不是Egret中资源组的概念, 资源组game = 场景资源 + 1角色 + 1怪物+10json, 打开场景前只需要加载资源组即可RES.loadGroup("game")。

所以loadScene根据依赖关系并不太灵活。

一般游戏scene也就那么几个,登录,大厅,房间,游戏等。
二  cc.resources
cc.resources 是一个 bundle,用于管理所有在 assets/resources 下的资源。
这是2.4.0新版本的增加的。一个bundle其实就是一个资源组,里面可以包含图片,声音,骨骼动画,prefab,scene,代码等。
所以cc.resources就相当于一个大的资源组,包含了resource文件夹下的所有资源。

实时加载资源

比如你有1000把武器图片,你只装备了一把,那么你就根据武器id,加载并显示你当前装备的武器就可以了。

// 加载 SpriteFrame
var self = this;
cc.resources.load("test assets/image", cc.SpriteFrame, function (err, spriteFrame)
    self.node.getComponent(cc.Sprite).spriteFrame = spriteFrame;
);

释放资源

cc.resources.release("test assets/image", cc.SpriteFrame);
cc.resources.release("test assets/anim");
cc.resources.releaseAll();

批量加载文件夹路径下所有资源

// 加载 test assets 目录下所有资源
cc.resources.loadDir("test assets", function (err, assets)
    // ...
);

预加载

cc.resources.preload('test assets/image', cc.SpriteFrame);

addRef和decRef

非动态加载资源由引擎来计数。而通过动态加载的资源,需要自己计数,当计数为0时,通过assetmanager释放资源才能成功。

addRef增加计数1。

cc.resources.load('image', cc.SpriteFrame, (err, spriteFrame) =>
    this.spriteFrame = spriteFrame;
    spriteFrame.addRef();
);

decRef减去计数1

this.spriteFrame.decRef();
this.spriteFrame = null;

 
三  cc.AssetManager

加载远程资源

cc.resources只能加载应用包和热更新本地资源。远程资源要用loadRemote。

比如加载服务器上的头像之类。

// 远程 url 带图片后缀名
var remoteUrl = "http://unknown.org/someres.png";
cc.assetManager.loadRemote(remoteUrl, function (err, texture)
    // Use texture to create sprite frame
);

加载bundle

这个是新版本资源管理最重要的更新了。bundle就相当于Egret的一个资源组。区别cc.resource加载单个资源、文件夹资源,cc.assetManager可以加载自由配置bundle(资源组)。

在通过 API 加载 Asset Bundle 时,引擎并没有去将该 bundle 中的所有资源加载出来,而只是去加载 Asset Bundle 的资源清单,以及包含的所有脚本。

加载完成之后会返回一个使用资源清单构造出来的 cc.AssetManager.Bundle 类的实例。你可以用这个实例去加载 Bundle 中的各类资源

cc.assetManager.loadBundle('bundleA', (bundle) =>
  bundle.load('xxx');
);

bundle被加载后,可以通过getBundle获取。

let bundleA = cc.assetManager.getBundle('game');

动态资源按资源组存放。game的bundle里存放了scene、spine、ui等。

选择game文件夹,并勾选bundle。

那么使用cc.assetMananger.loadBundle("game")就能加载game资源组的清单,再通过bundle.load就能加载资源组的资源。

是不是很绕...感觉cc.assetMananger.loadBundle和旧版cc.loader.loadResDir的区别就是新版对这个文件夹的资源增加了一个清单,然后你可以通过清单对这个文件夹资源进行更详细的操作。

cc.assetManager.loadBundle('game', (bundle) =>
  bundle.loadScene("GameScene");
);

let bundle = cc.assetmanager.getBundle("game");
bundle.releaseAll();

 
————————————————
版权声明:本文为CSDN博主「「已注销」」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_43287088/article/details/107172955

将mobx作为cocoscreator状态管理工具

GitHub-oyb81076/cocos-mobx-demo:将mobx作为cocoscreator状态管理工具 查看详情

cocoscreator资源工作流程(代码片段)

--摘自官方文档资源工作流程添加资源资源管理器提供了三种在项目中添加资源的方式:通过创建按钮添加资源在操作系统的文件管理器中,将资源文件复制到项目资源文件夹下,之后再打开或激活CocosCreator窗口,完成资源导入... 查看详情

cocoscreator通用框架设计——资源管理优化(代码片段)

接着《CocosCreator通用框架设计——资源管理》聊聊资源管理框架后续的一些优化:通过论坛和github的issue,收到了很多优化或bug的反馈,基本上抽空全部处理了,大概做了这么一些事情。https://github.com/wyb10a10/cocos_creator_framework修... 查看详情

cocoscreator卡在加载资源

cocoscreator卡在加载资源具体解答如下1、软件包故障:重新从官网,应用市场或应用商店下载最新版本,重新安装。2、系统版本不兼容:去官网换一个版本下载并重新安装。参考技术A静态加载/动态加载cocos的资源加载方式有静态... 查看详情

cocoscreator项目结构(代码片段)

...文件。只有在 assets 目录下的内容才能显示在 资源管理器 中。 查看详情

cocoscreator—如何给资源打md5版本号

CocosCreator是Cocos最新一代的游戏开发者工具,基于Cocos2d-x,组件化,脚本化,数据驱动,跨平台发布。CocosCreator的开发思路已经逐步跟Unity3D靠拢,写起来也更方便快捷,开发效率更高。但既然是新东西,免不了各种坑。其中在发... 查看详情

cocoscreator资源管理assetmanager

版本:2.4.0cocos的资源管理初用真的很难。靠依赖关系去加载,释放,往往不灵活,得不到想要的结果。Egret资源管理做得很好,有可视化管理工具,资源分组加载,动态加载之类都比较灵活。解决了1个... 查看详情

cocoscreator-精灵动态加载图片资源,实例化精灵(代码片段)

CocosCreator-3.0-精灵动态加载图片资源,实例化精灵varspriteFrameEnemyBigGlobal:SpriteFrame;//精灵框架敌人大号全局变量onLoad()console.log('-LifeonLoad-');//加载SpriteFrame,image是ImageAsset,spriteFrame是im 查看详情

cocoscreator-精灵动态加载图片资源,实例化精灵(代码片段)

CocosCreator-3.0-精灵动态加载图片资源,实例化精灵varspriteFrameEnemyBigGlobal:SpriteFrame;//精灵框架敌人大号全局变量onLoad()console.log('-LifeonLoad-');//加载SpriteFrame,image是ImageAsset,spriteFrame是im 查看详情

cocoscreator-精灵动态加载图片资源,实例化精灵(代码片段)

CocosCreator-3.0-精灵动态加载图片资源,实例化精灵varspriteFrameEnemyBigGlobal:SpriteFrame;//精灵框架敌人大号全局变量onLoad()console.log('-LifeonLoad-');//加载SpriteFrame,image是ImageAsset,spriteFrame是im 查看详情

cocoscreator内存占用多少算高

参考技术ACocosCreator的内存占用量取决于您的游戏中使用的资源,以及您的游戏的复杂程度。一般来说,如果您的游戏中使用的资源比较多,并且游戏的复杂程度较高,那么CocosCreator的内存占用量就会比较高。但是,如果您的游... 查看详情

cocoscreator聊天气泡

转自:http://blog.csdn.net/Q1648778537/article/details/78847199建Sprite.Atlas:Sprite显示图片资源所属的atlas图集资源SpriteFrame:渲染Sprite使用的SpriteFrame图片资源Type:渲染模式,包括普通(Simple) 查看详情

微信小游戏开发之cocoscreator资源加载方式

参考技术ACocosCreator中图片、Json等资源的动态加载CocosCreator微信小游戏开发系列文章,是我在逐步开发过程中,基于官方文档之上,记录一些重点内容,以及对官方文档中有些知识点的补充和分析。CocosCreator导入资源方式:项目... 查看详情

cocoscreator利用常驻节点做图层管理

版本:2.3.4 一般游戏都有图层管理,比如sceneLayer 场景层panelLayer 弹框层tipLayer  提示框层等等 cocos里的场景不是持久化的,每次切换都会自动destroy,如果在场景上放这些图层,那么每个scene都要放一遍?然... 查看详情

cocoscreator入门------资源(骨骼动画)(代码片段)

...据.json图集数据.png图集纹理 在项目中的存放为了提高资源管理效率,建议将导入的资源文件存放在单独的目录下,不要和其他资源混在一起。  查看详情

用cocoscreator让嫦娥一步步跳上月亮(代码片段)

...是比较慢的)当前项目界面:在界面的左下角,有资源管理器。一个项目中其中比较重要的文件夹是assets,assets将会用来放置游戏中所有的本地资源、脚本和第三方库文件。只有在assets目录下的内容才能显示在资源管... 查看详情

cocoscreator手记02——examples中文注释目录

...有一套例子库。用于展示引擎的功能和API的用法。最近看CocosCreator引擎附带的例子库。目前来说这套Cocos系列引擎的最新版,很有诚意,对比老引擎。加入了很多新的内容。比如资源下载器装载器,各种布局管理工具。预制资源... 查看详情

cocoscreator2.3开发《海底世界》小游戏(代码片段)

...与玩家输入事件编程帧事件编程二、主场景层级管理器与资源管理器架构由于CocosCreator是以内容创作为核心的游戏开发工具,它的IDE的操作既照顾到了美工又考虑程序员,所以具有半设计与半编程特征——当然编程还是主要开发... 查看详情