cocos2dx3.2 异步加载和动态加载
来源:互联网 发布:windows共享文件夹密码 编辑:程序博客网 时间:2024/05/19 06:15
半个月没有更新博客,从这个项目开始学习了很多细节的东西,都不太成系统,但是却是开发上线中必须经历的东西。比如超级玛丽系列(一)中的正确的异步加载,正确的分层、正确的合成和加载plist、及时的移除未使用的cache、按照关卡动态加载当前关卡所需的资源等。
本章只分享一下异步加载的逻辑,如有不对的地方还望大家及时指出。
目前我代码中需要异步加载的资源一共有四类:
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));
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.CocosStudio导出的.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加载即可使用里面的精灵。
- cocos2dx3.2 异步加载和动态加载
- cocos2dx3.2 异步加载和动态加载
- cocos2dx3.2 异步动态加载
- 学习动态加载游戏场景和异步加载游戏场景
- javascript异步动态加载
- 异步动态加载script
- cocos2dx3.2 加载地图和读取数据的简单使用
- 异步加载和延迟加载
- 异步加载和延迟加载
- 同步加载、异步加载和延迟加载
- 缓存和异步加载
- 异步加载 和验证
- Extjs 动态异步加载树
- jquery.autocomplete 异步动态加载
- 动态异步加载js文件
- 异步请求动态加载页面
- Gallery异步加载图片和listView动态刷新
- 动态加载和静态加载
- linux 6.5 安装oracle 11g 系统缺包的检查
- php curl判断一个远程文件在不在
- 杭电1878————欧拉回路基础题目
- 一个测试脚本,测试lvm
- Core Location和MapKit的一些简单使用
- cocos2dx3.2 异步加载和动态加载
- angular-phonecat 项目无法启动
- poppler 之介绍文章
- Linux常用命令行选项的含义
- zmq源码阅读 —— zmq_send()和zmq_recv()
- java中反射学习整理
- 51 talk immersion notes
- Android基础之——MacOSX下elipse开发环境的配置
- VC6.0快捷键说明