Cocos2d-x 3.2 异步动态加载

本章只分享一下异步加载的逻辑,如有不对的地方还望大家及时指出。


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

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加载即可使用里面的精灵。 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值