博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Cocos2d-x 3.2 异步动态加载 -- 保卫萝卜开发总结
阅读量:6328 次
发布时间:2019-06-22

本文共 2219 字,大约阅读时间需要 7 分钟。

这篇文章发现的有些晚了。其实,在此现在的视频课程“拇指接龙游戏”中,在创建通用型异步资源加载场景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纹理。

void LoadingScene::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));  void LoadingScene::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));  void LoadingScene::jsonAsyncCallback(float f)  {      curReloadExportJsonNum++;      loading = true;  }

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

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

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

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

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

转载地址:http://shyoa.baihongyu.com/

你可能感兴趣的文章
【Signals and Systems】 SYLLABUS
查看>>
RH135-2-command-line-interface
查看>>
浅谈OS
查看>>
mac下开启docker API远程调用
查看>>
tar 命令的详解
查看>>
Cisco路由器安全配置
查看>>
第十次作业
查看>>
spring事务管理(一)
查看>>
给定一个字符串s,返回去掉子串"mi"后的字符串。
查看>>
Nginx 外的另一选择,轻量级开源 Web 服务器 Tengine 发布新版本
查看>>
配置免密码登录Linux服务器
查看>>
Wrod中超链接的一些技巧
查看>>
我的友情链接
查看>>
IP_VFR-4-FRAG_TABLE_OVERFLOW【cisco设备报错】碎片***
查看>>
Codeforces Round #256 (Div. 2) D. Multiplication Table 【二分】
查看>>
ARM汇编指令格式
查看>>
HDU-2044-一只小蜜蜂
查看>>
HDU-1394-Minimum Inversion Number
查看>>
jsonView谷歌插件
查看>>
df -h 卡住
查看>>