问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

cocos2dx 为什么要异步加载动画

发布网友 发布时间:2022-05-04 23:27

我来回答

2个回答

懂视网 时间:2022-05-05 03:48

目前我代码中需要异步加载的资源一共有四类: 1.png,单个png的情况比较少 2.plist和png一起的打包资源 3.plist和pvr.ccz一起的打包资源 4.CocosStudio导出的.ExportJson后缀的动画文件 再重复一遍加载机制:所有的资源是按序加载的,不可同时加载多个文件。

目前我代码中需要异步加载的资源一共有四类:

1.png,单个png的情况比较少

2.plist和png一起的打包资源

3.plist和pvr.ccz一起的打包资源

4.CocosStudio导出的.ExportJson后缀的动画文件


再重复一遍加载机制:所有的资源是按序加载的,不可同时加载多个文件。执行异步加载的处理肯定是写在void update(float f)中,做到按帧加载。


1.png的异步加载

1

2

Director::getInstance()->getTextureCache()->addImageAsync(reloadImages[curReloadImgNum],

CC_CALLBACK_1(LoadingScene::imageAsyncCallback, this));


2.plist和png一起的打包资源

废话不多,直接上方法,没有加载plist的api,我们使用如1的方法加载png,然后在回调函数中加载plist。

1

2

Director::getInstance()->getTextureCache()->addImageAsync(reloadPlists[curReloadPlistNum]+"png",

CC_CALLBACK_1(LoadingScene::plistImageAsyncCallback, this));

注意回调函数的参数,这是plist异步加载的关键,形参是png纹理。

1

2

3

4

5

6

void LoadingScene::plistImageAsyncCallback(cocos2d::Texture2D* texture)

{

SpriteFrameCache::getInstance()->addSpriteFramesWithFile(reloadPlists[curReloadPlistNum].append("plist"), texture);

curReloadPlistNum++;

loading = true;

}

3.plist和pvr.ccz一起的打包资源

类似2的方法。

1

2

3

4

5

6

7

8

Director::getInstance()->getTextureCache()->addImageAsync(reloadPvrPlists[curReloadPvrPlistNum] + "pvr.ccz",

CC_CALLBACK_1(LoadingScene::pvrPlistImageAsyncCallback, this));

void LoadingScene::pvrPlistImageAsyncCallback(cocos2d::Texture2D* texture)

{

SpriteFrameCache::getInstance()->addSpriteFramesWithFile(reloadPvrPlists[curReloadPvrPlistNum].append("plist"), texture);

curReloadPvrPlistNum++;

loading = true;

}

4.Cocos Studio导出的.ExportJson后缀的动画文件

1

2

3

4

5

6

7

ArmatureDataManager::getInstance()->addArmatureFileInfoAsync(reloadExportJsons[curReloadExportJsonNum],

this, schedule_selector(LoadingScene::jsonAsyncCallback));

void LoadingScene::jsonAsyncCallback(float f)

{

curReloadExportJsonNum++;

loading = true;

}

四种加载方法已经介绍完了,只要在update中做好按序加载就可以了。


如何优化内存,加载尽量少的资源?

我的这个场景叫LoadingScene,这是一个中转场景,既是切换两个场景之间的过渡场景,用来释放上一个场景的资源和预加载下一个场景资源。


在这个场景中,我们可以释放掉cache中的所有文件,然后根据下个场景的内容来加载所需的文件。 这就需要我们做好配置工作,比如保卫萝卜,下一关只有两种塔,我们只加载这两种塔的动画即可,而不需要所有塔全部加载。


还有一个小技巧关于异步加载exportJson的文件。这个异步加载,既可以加载动画缓存,还可以把跟它一起的plist和png一起加载到缓存中,所有如果想加载plist,也可以把它们到成静止的动画,然后使用exportJson加载即可使用里面的精灵。


来源网址:http://www.cocoachina.com/bbs/read.php?tid=219154

热心网友 时间:2022-05-05 00:56

找不到图片,仔细看看自己资源目录系有没有这个图,还有就是这个图虽然有,但是路径不对,使用vs运行的时候会弹出中断进入调试的,你查看堆栈就很容易知道是哪一行的问题了
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
有哪些小动物? 卸载百度贴吧之后保存的图片没了怎么恢复 ...的朋友,但我和他不在同一城市,我这样异地买保险以后理赔手续麻烦吗... 厦门哪些景点可以享受阳光海滩? 朋友说你变了,是褒义还是贬义? 这句话是贬意还是褒意 能在一起多久就在一起多久是褒义还是贬义 ,谈恋爱后结婚好吗? 之前爱奇艺有个号,是用一个旧手机绑定(旧手机号封了)刚刚不小心退出了... 前列腺癌可以彻底治愈吗 win10电脑怎么禁一部分连网Win10系统中如何禁止某个程序联网 PPS没有直播了吗? 电视没有直播? 今天的年度经济人物颁奖没有直播吗 英超没有直播吗 老师,今天没有直播吗? 德玛西亚杯没有直播吗 花样滑冰没有直播吗 斯铭今天没有直播吗 如何看到微信群里陌生人的呢? 如何查看非好友的 微信群非好友看 不是微信好友怎么样才可以看到对方的? 微信群里为什么看不到朋友的? 集粉软件怎么查看群里不是好友人的 怎样知道微信群里其他成员的? 如何在PS里用什么工具直接旋转90度角 怎么查看微信群成员的?(非好友),有可以提取群成员的软件吗_百度问一问 在同一个微信群里,不是好友,可以看见别人的吗?有什么方法可以得知别人的? 在群里怎么看对方? 谁能专业点的解释下什么是黄页 bilibili怎么保存别人的头像 这2句什么意思:逐露仙人珠落掌,别风楼观雪生檐 招行一卡通金卡和金葵花卡在资金没达标的情况下有没有办法免年费,请高人解惑。 招商银行 主卡附属卡 怎么刷才能避免年费? 我想问一下淘宝直播付费推广管理我交钱进去了怎么设置推广? cocos2dx 加载精灵帧可以异步吗 淘宝直播怎么设置推广 生日祝福的短信 生日祝福朋友的话 顾客孩子过生日祝福短信 我们导员让我们入党积极分子写一篇有关党支部创先争优活动的思想汇报,急求!!!! cam bt什么意思 电脑配置值中的Cam+BT+FPR+BLKB是什么意思 Cam+BT+ Backlit keyboard+Fingerprint是什么意思 安卓上有哪些比较好用日语输入法?有日本境内用的输入法下载吗? i3-2350M/2 GB/320GB 7200/Cam/BT/FPR/ThinkPad BGN/6cell/W7HB32/1Yr 什么意思详细一点谢谢!!! 求手机的日语输入法,要那种能写日文汉字的,知道有什么输入法的吗??谢谢!!! 电脑配置单中的BT是什么意思? 什么是2YRCARRYIN 北京二套房究竟咋认定?为什么大家都很懵逼