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对象的优点(松耦合 能够让零散部分组成一个总体,而这些总体并不在意之间彼此的细节,从而达到了真正的物理上 ...
 
随机推荐
- 轻量级数据库sqlite的接口说明
			
原文地址:http://www.cnblogs.com/kfqcome/archive/2011/06/27/2136999.html 一.使用流程 要使用sqlite,需要从sqlite官网下载到三 ...
 - Android Studio入门到精通
			
链接地址:http://blog.csdn.net/yanbober/article/details/45306483 目标:Android Studio新手–>下载安装配置–>零基础入门 ...
 - 【转】Shell编程
			
原文链接: Shell编程 打算有时间简单了解shell编程 1.shell结构 一个简单的例子: [root@localhost shell]# vi example #!/bin/sh #Thi ...
 - GDG shanghai programming one hour by JavaScript
			
刚在昨天参加了一场JS入门编程的活动,目的就是提升对JS的兴趣. 因为是针对零基础开发者的,一上来就是“Hello World!”了 当然,想用JS输出"Hello World!" ...
 - struts2中根对象以及ognl .
			
Struts2中的OGNL表达式语言是对Xwork的OGNL的封装.我们要理解一下几点: 1. Struts2中将ActionContext作为OGNL的上下文环境(ActionContext内部含有 ...
 - Python函数式编程:内置filter函数使用说明
			
filter操作是函数式编程中对集合的重要操作之一,其作用是从原集合中筛选符合条件的条目,组成一个新的集合. 这在我们日常编程中是非常常见的操作.我们通常的做法是通过循环语句来处理. 而使用filte ...
 - 转:python中函数curry化
			
1 柯里化(Currying) 一个函数有多个参数,我们希望能固定其中几个参数的值. from functools import partial def foo(a,b,c): return a+b+ ...
 - Mojo 自动发布接口
			
get '/api/auto_publish/publish' => sub{ my $c = shift; my $env = $c->param('env'); my $app = $ ...
 - 基于visual Studio2013解决算法导论之024双向链表实现
			
 题目 双向链表的实现 解决代码及点评 #include <stdio.h> #include <stdlib.h> #include <time.h> #i ...
 - LDAP研究
			
一.ldap介绍 ldap是轻量级的文件夹訪问协议.重点是文件夹訪问协议.更为重点的是协议.好吧他是一个协议.也就是一个标准. 那么实现这款协议的软件当中有一款就是openldap. 二.安装wind ...