Cocos2d-x 3.2 异步动态加载 -- 保卫萝卜开发总结

Cocos2d-x 3.2 异步动态加载 -- 保卫萝卜开发总结,第1张

概述这篇文章发现的有些晚了。其实,在此现在的视频课程“拇指接龙游戏”中,在创建通用型异步资源加载场景LoadingScene时就使用了其中的一部分。原文如下: 本章只分享一下异步加载的逻辑,如有不对的地方还望大家及时指出。 目前我代码中需要异步加载的资源一共有四类: 1.png,单个png的情况比较少 2.plist和png一起的打包资源 3.plist和pvr.ccz一起的打包资源 4.CocosS

这篇文章发现的有些晚了。其实,在此现在的视频课程“拇指接龙游戏”中,在创建通用型异步资源加载场景LoadingScene时就使用了其中的一部分。原文如下:

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


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

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

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

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

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

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


1.png的异步加载

Director::getInstance()->getTextureCache()->addImageAsync(reloadImages[curReloadimgNum],CC_CALLBACK_1(LoadingScene::imageAsyncCallback,this));

这个没有什么可说的,在新的示例工程cpp-test中普遍使用。当然使用的是Cocos2d-x 3.x版本中有关表达。


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

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

Director::getInstance()->getTextureCache()->addImageAsync(reloadPLists[curReloadPListNum]+"png",CC_CALLBACK_1(LoadingScene::plistimageAsyncCallback,this));

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


voIDLoadingScene::plistimageAsyncCallback(cocos2d::Texture2D*texture){SpriteFrameCache::getInstance()->addSpriteFramesWithfile(reloadPLists[curReloadPListNum].append("pList"),texture);curReloadPListNum++;loading=true;}

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

类似2的方法。

Director::getInstance()->getTextureCache()->addImageAsync(reloadPvrPLists[curReloadPvrPListNum]+"pvr.ccz",CC_CALLBACK_1(LoadingScene::pvrPlistimageAsyncCallback,this));voIDLoadingScene::pvrPlistimageAsyncCallback(cocos2d::Texture2D*texture){SpriteFrameCache::getInstance()->addSpriteFramesWithfile(reloadPvrPLists[curReloadPvrPListNum].append("pList"),texture);curReloadPvrPListNum++;loading=true;}

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


ArmatureDataManager::getInstance()->addArmaturefileInfoAsync(reloadExportJsons[curReloadExportJsonNum],this,schedule_selector(LoadingScene::JsonAsyncCallback));voIDLoadingScene::JsonAsyncCallback(floatf){curReloadExportJsonNum++;loading=true;}

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

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

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


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


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

总结

以上是内存溢出为你收集整理的Cocos2d-x 3.2 异步动态加载 -- 保卫萝卜开发总结全部内容,希望文章能够帮你解决Cocos2d-x 3.2 异步动态加载 -- 保卫萝卜开发总结所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1031248.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存