这里以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。

最新文章

  1. android快捷开发之Retrofit网络加载框架的简单使用
  2. IOS 7 风格Checkbox
  3. codeforces 478B Random Teams 解题报告
  4. 复制选中的listbox内容
  5. RelativeLayout练习
  6. eclipse jetty启动内存溢出
  7. redis 入门笔记(一)
  8. 重装mysql步骤
  9. ES6的let命令实现猜想
  10. button元素兼容问题浅析
  11. 操作百度API
  12. java--join方法
  13. github上前100的ios项目
  14. Win7下用easyBCD引导安装Ubuntu15.04
  15. 我要当皇帝等微信小游戏的wbs
  16. 【自动化测试:笔记一】adb命令
  17. spark-yarn
  18. window netsh interface portproxy 配置转发
  19. 部署Java Web项目到Heroku
  20. php 访问控制和重载

热门文章

  1. javascript无缝滚动原理
  2. EntityFramework:再谈 “如何映射聚合?”
  3. 代码规范审查 - Sonar集成Visual Studio
  4. 1644 免费馅饼 题解(c++)
  5. echarts使用记录(二)legend翻页,事件,数据集,设置y轴最大/小值,让series图形从右侧出往左移动
  6. luigi框架--关于python运行spark程序
  7. linux shell的执行方式
  8. iOS 设置app语言中文,比如 copy中文,拍照按钮cancel 中文
  9. git stash笔记
  10. PHP - AJAX 与 MySQL