这里以3d场景加载为例,2d情况类似。

先同步加载模型数据和尺寸缩小了100倍的贴图,创建mesh。然后异步加载所有精细纹理并每加载完一个就替换一个,并进入场景。

如此做法的效果是当刚进入场景时看到的是贴图非常糙的场景,然后逐渐贴换为精细贴图。(就像放大谷歌地图时的情况)。

下图左边是 刚进入场景时,右边是 精细纹理异步加载完成后:

  

具体实现如下:

bool ClevelMapLayer::init(){

  loadAllModelData();

  loadAllRoughTex();

  createMeshesWithModelDataAndMiniTex();

  asyncLoadAllFineTex();  

  return true;

}

void ClevelMapLayer::asyncLoadAllFineTex(){

const int nTexPath=(int)m_allTexPathList.size();

for(int i=0;i<nTexPath;i++){

const string&texPath=m_allTexPathList[i];

//ref:http://www.cocoachina.com/bbs/read.php?tid=198291

CCTextureCache::sharedTextureCache()->addImageAsync(texPath,CC_CALLBACK_1(ClevelMapLayer::replaceTexCallBack,this,texPath));

}

}

void ClevelMapLayer::replaceTexCallBack(CCTexture2D*tex,const string&texPath){

vector<Cmesh*> meshList=getMeshesWhoseTexPathEqualsTo(texPath);

for(int i=0;i<(int)meshList.size();i++){

Cmesh*mesh=meshList[i];

mesh->setTexture(tex);

}

}

另外粗略看了一下,如果没看错的话cocos2dx中异步加载纹理的线程是公用的,只有一个,所以异步加载的纹理的完成顺序与调用addImageAsync的先后顺序一致,因此对于异步加载的纹理,我们想让哪个纹理最先显示出来,就应该最先对那个纹理调用addImageAsync。

cocos2dx 3.3 异步加载纹理的更多相关文章

  1. cocos2d-x lua中实现异步加载纹理

    原文地址:  http://www.cnblogs.com/linchaolong/p/4033118.html 前言   问题:最近项目中需要做一个loading个界面,界面中间有一个角色人物走动的 ...

  2. cocos2dx lua中异步加载网络图片,可用于显示微信头像

    最近在做一个棋牌项目,脚本语言用的lua,登录需要使用微信登录,用户头像用微信账户的头像,微信接口返回的头像是一个url,那么遇到的一个问题就是如何在lua中异步加载这个头像,先在引擎源码里找了下可能 ...

  3. 【转】【玩转cocos2d-x之二十三】多线程和同步03-图片异步加载

    原创作品,转载请标明:http://blog.csdn.net/jackystudio/article/details/15334159 cocos2d-x中和Android,Windows都 一样, ...

  4. cocos2d-x中CCTextureCache图片资源的异步加载

    如果没有预先加载图片,则可以通过addImageAsync()函数实现异步加载,该函数通过创建一个加载线程来加载图片,并且在主线程中通过调用回调函数来读取该图片资源纹理.其主要过程如下: 1.创建线程 ...

  5. cocos2d-x中CCTextureCache图片资源的异步加载<转>

    如果没有预先加载图片,则可以通过addImageAsync()函数实现异步加载,该函数通过创建一个加载线程来加载图片,并且在主线程中通过调用回调函数来读取该图片资源纹理.其主要过程如下: 1.创建线程 ...

  6. cocos2dx 3.x for lua "异步加载"实现过程

    在lua中,cocos2dx 建立的栈只能被一个线程(主线程)访问,如果在c++建立子线程,然后通过c++调用lua回调函数实现异步加载就会报错. 如果试图通过c++子线程直接实现加载资源,返回一个布 ...

  7. cocos2d-x addImageAsync()异步加载资源成功之后的场景跳转问题

    http://blog.csdn.net/w20175357/article/details/23546985 1.先说说addImageAsync()异步加载图片的问题 做游戏的时候现在资源的比较大 ...

  8. 【Cocos2d-Js基础教学(5)资源打包工具的使用及资源的异步加载处理】

    TexturePacker是纹理资源打包工具,支持Cocos2dx的游戏资源打包. 如果用过的同学可以直接看下面的资源的异步加载处理 首先为什么用TexturePacker? 1,节省图片资源实际大小 ...

  9. 【Cocos2dx3.x Lua】图片异步加载

    一.说明     异步加载就是把消耗程序时间比较大的加载操作放到其他线程中,待加载完毕后通过回调函数的方式通知主线程.   addImageAsync函数实现(Cocos2dx 3.3) Link:  ...

随机推荐

  1. APP H5页面显示优化

    在开发移动端APP页面时,对各操作系统各种型号的手机进行适配是必须的.然鹅,上周在开发完一个落地页后,被测试给打了回来,其中列出了一个在我看来很小的问题:单击进入页面的时候,页面还没加载完的时候字体显 ...

  2. Android API 中文(14) —— ViewStub

    前言 关键字: android.view.ViewStub,版本为Android 2.2 r1 本章翻译来自唐明 ,这里本博负责整理和发布,欢迎其他译者一起参与Android API 的中文翻译行动, ...

  3. [Android Pro] Android 必知必会-使用 supportV4 的 RoundedBitmapDrawable 实现圆角

    RoundedBitmapDrawable 是 supportV4 下的一个类,有了它,显示圆角和圆形图片的情况下就不需要额外的第三方类库了,还能和各种图片加载库配合使用. 背景 今天无意间看到一段实 ...

  4. 嵌入式mp3播放器

    分四部分:按键驱动,声卡驱动,Madplay播放器移植,MP3主播放器处理 按键1:播放,按键2:停止,按键3:上一曲,按键4:下一曲 UA1341内核自带声卡驱动 .解压内核: tar zxvf l ...

  5. iOS:分组的表格视图UITableView,可以折叠和展开

    虽然表格视图可以分组,但是如果分组后,每一行的内容太多,往后翻看起来比较的麻烦.为了解决这个麻烦,可以将分组的行折叠和展开.折叠时,行内容就会隐藏起来:展开时,行内容就会显示出来. 折叠时: 展开后: ...

  6. 高性能WEB开发:深入理解页面呈现、重绘、回流

    在讨论页面重绘.回流之前.需要对页面的呈现流程有些了解,页面是怎么把html结合css等显示到浏览器上的,下面的流程图显示了浏览器对页面的呈现的处理流程.可能不同的浏览器略微会有些不同.但基本上都是类 ...

  7. HDFS的常用操作

    本文地址:http://www.cnblogs.com/archimedes/p/hdfs-operations.html,转载请注明源地址. 1.HDFS文件的权限以及读写操作 HDFS文件的权限: ...

  8. leetCode 42.Trapping Rain Water(凹槽的雨水) 解题思路和方法

    Trapping Rain Water Given n non-negative integers representing an elevation map where the width of e ...

  9. CSV 读写

    using System; using System.IO; using System.Runtime.InteropServices; using UnityEngine; public class ...

  10. InnerHtml() 与html( )的区别

    InnerHtml() 与html( )的区别 在一个 HTML 文档中, 我们可以使用 .html() 方法来获取任意一个元素的内容. 如果选择器匹配多于一个的元素,那么只有第一个匹配元素的 HTM ...