cocos2dx3.2 异步载入和动态载入
半个月没有更新博客,从这个项目開始学习了非常多细节的东西,都不太成系统。可是却是开发上线中必须经历的东西。比方超级玛丽系列(一)中的正确的异步载入,正确的分层、正确的合成和载入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 异步载入和动态载入的更多相关文章
- Codecs是以plugin的形式被调用的(显示中文的codec plugin文件是qcncodecs4.dll),可静态载入和动态载入
作为非英语国家人员开发的类库,QT有充分的理由优先考虑支持Unicode和各国自定义字库编码.大家也知道了QT对软件Internationalization有一套完整的开发模型,包括专门为此写的lin ...
- 关于LightMapping和NavMesh烘焙的动态载入
熟悉unity的朋友都应该知道,unity有内部LightMapping烘焙和NavMesh寻路的功能.但这些非常好用的功能,都是基于对某个已经保存的关卡(scene)进行烘焙(Bake)的操作,我一 ...
- 为了提高性能,怎样动态载入JS文件
超级表格是一款多人协作的在线表格.程序相当复杂,用到十几个JS文件. 可是有些文件是在打开某些类型的表格时才须要载入. 比如,仅仅有当打开甘特图表格时,才须要载入gantetu.js文件. 那么问题来 ...
- 注意Android里TextView控件的一个小坑,用android:theme来设置样式时动态载入的layout会丢失该样式
注意Android里TextView控件的一个小坑,用android:theme来设置样式时动态载入的layout会丢失该样式 这个坑,必须要注意呀, 比如在用ListView的时候,如果在List_ ...
- js中动态载入css js样式
js中动态载入css样式,方法如下: //<link rel="stylesheet" type="text/css" href="http:/ ...
- 深入浅出Android动态载入jar包技术
在实际项目中.因为某些业务频繁变更而导致频繁升级client的弊病会造成较差的用户体验,而这也恰是Web App的优势,于是便衍生了一种思路.将核心的易于变更的业务封装在jar包里然后通过网络下载下来 ...
- Unity 动态载入Panel并实现淡入淡出
unity版本:4.5 NGUI版本:3.6.5 参考链接:http://tieba.baidu.com/p/3206366700,作者:百度贴吧 水岸上 动态载入NGUI控件,这里用Panel为例说 ...
- 实现Android 动态载入APK(Fragment or Activity实现)
尊重原创:http://blog.csdn.net/yuanzeyao/article/details/38565345 近期由于项目太大了.导致编译通只是(Android对一个应用中的方法个数貌似有 ...
- 利用java反射机制 读取配置文件 实现动态类载入以及动态类型转换
作者:54dabang 在spring的学习过程之中,我们能够看出通过配置文件来动态管理bean对象的优点(松耦合 能够让零散部分组成一个总体,而这些总体并不在意之间彼此的细节,从而达到了真正的物理上 ...
随机推荐
- C#个人笔记
1.扩展方法:类名前面加static ,方法参数前 加this,如:对string类进行扩展 public static class string { public static ...
- android动画效果演示
第一种:TranslateAnimation 动画效果演示: public void move(View view) { // 传统动画效果 TranslateAnimation animation ...
- Chapter 7 代理模式
代理模式:为其它对象提供一种代理以控制对这个对象的访问. 代码: package xiao; class Girl{ private String name; public void setName( ...
- 为什么要用BASE64
BASE64和其他相似的编码算法通常用于转换二进制数据为文本数据,其目的是为了简化存储或传输.更具体地说,BASE64算法主要用于转换二进 制数据为ASCII字符串格式.Java语言提供了一个非常好的 ...
- 修改、设置root密码
参考文档: http://zhidao.baidu.com/link?url=OaUTAj6FrMGDjbPZHWv3NNDOaIl3HNqZz_3lF_Zpi8oZpLkBfnHfPlpgE1EvN ...
- 上证A股股指跌破1900
上证A股股指跌破1900 有钱的同学赶紧买哦,机会难得哈哈!
- 三、nginx301跳转302跳转
301跳转设置: server { listen 80; server_name downcc.com; rewrite ^/(.*) http://www.downcc.com/$1 permane ...
- <转>一个最不可思议的MySQL死锁分析
1 死锁问题背景 1 1.1 一个不可思议的死锁 1 1.1.1 初步分析 3 1.2 如何阅读死锁日志 3 2 死锁原因深入剖析 4 2.1 Delete操作的加锁逻辑 4 2.2 死锁预防策略 5 ...
- perl 传递对象到模块
perl 中的对象 就是引用 通过new方法传递数据结构给各个模块 [root@wx03 test]# cat x1.pm package x1; use Data::Dumper; sub new ...
- 服务列表 - Sina App Engine
服务列表 - Sina App Engine 短信服务 新浪无线短信服务是由新浪无线提供的综合性短信服务. 使用服务 下载SDK: php 服务首页 方法 新浪无线短信服务是由新浪无线提供的综合性短信 ...