我们通常使用CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("xxx.plist")来加载资源,为了解决主线程界面的不流畅问题,我们需要将载入资源的耗时操作异步进行,所以我们理所当然的在异步线程中调用并载入资源。

但是当运行程序的时候却出现了问题:载入的资源都没有办法正常显示了。而改到主线程又正常了,仔细检查能够确定线程中的资源载入确实被调用了,到底哪里出了问题?

根据OpenGL的标准Texture2D纹理的创建必须在主线程完成,所以一定是载入plist的时候创建的Texture2D在访问时都是无效的。

所以我们只能在主线程中完成对Texture2D的创建,但是这样一来就不能解决主线程载入资源时不流畅的问题。那么我们可以在主线程中使用CCTextureCache::sharedTextureCache()->addImage("xxx.png")先载入纹理图片,然后在异步线程中调用CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("xxx.plist", pTexture2D)载入plist。这样一来纹理图片都可以正常显示了,但是我们发现其实并没有解决主线程不流畅的问题。

通过研究发现,必须把Texture2D的读取在异步线程完成,否则无法解决主线程不流畅的问题,addUIImage可以通过CCImage创建Texture2D,并且这个过程并不耗时,这样一来我们只能采取如下方法:

1、在异步线程中将纹理图片读取到内存(CCImage)。

2、主线程CCTextureCache::sharedTextureCache()->addUIImage(pImage, "xxx.png")。

3、在异步线程载入其他资源。

关于Cocos2d-x多线程异步载入资源的问题的更多相关文章

  1. UE4异步载入资源

    转自:http://blog.ch-wind.com/ue4%E5%BC%82%E6%AD%A5%E8%BD%BD%E5%85%A5%E8%B5%84%E6%BA%90/ 所有的“硬”指针指向的资源都 ...

  2. ImageLoader实现图片异步载入

    ImageLoader是一个广泛使用的图片库,在向网络请求图片时.使用imageView和smartView常会产生outofmemory错误,这时ImageLoader能够起到非常大的作用.主要有例 ...

  3. Android异步载入全解析之使用多线程

    异步载入之使用多线程 初次尝试 异步.异步,事实上说白了就是多任务处理.也就是多线程执行.多线程那就会有各种问题,我们一步步来看.首先.我们创建一个class--ImageLoaderWithoutC ...

  4. ListView的异步载入(笔记,多线程和AsyncTask)

    异步载入最经常使用的两种方式: 多线程,线程池     AsyncTask 实例操作: 从一个站点上获取Json数据.然后将数据在ListView上显示. 1.创建item_layout布局 , 改动 ...

  5. [原]unity3d之http多线程异步资源下载

    郑重声明:转载请注明出处 U_探索 本文诞生于乐元素面试过程,被面试官问到AssetBundle多线程异步下载时,愣了半天,同样也被深深的鄙视一回(做了3年多u3d 这个都没用过),所以发誓要实现出来 ...

  6. cocos2dx3.2 异步载入和动态载入

    半个月没有更新博客,从这个项目開始学习了非常多细节的东西,都不太成系统.可是却是开发上线中必须经历的东西.比方超级玛丽系列(一)中的正确的异步载入,正确的分层.正确的合成和载入plist.及时的移除未 ...

  7. Android异步载入全解析之大图处理

    Android异步载入全解析之大图处理 异步载入中很重要的一部分就是对图像的处理,这也是我们前面用异步载入图像做示例的原因. 一方面是由于图像处理不好的话会很占内存,并且easyOOM,还有一方面,图 ...

  8. Android 多线程 异步加载

    Android 应用中需要显示网络图片时,图片的加载过程较为耗时,因此加载过程使用线程池进行管理, 同时使用本地缓存保存图片(当来回滚动ListView时,调用缓存的图片),这样加载和显示图片较为友好 ...

  9. C# 实现的多线程异步Socket数据包接收器框架

    转载自Csdn : http://blog.csdn.net/jubao_liang/article/details/4005438 几天前在博问中看到一个C# Socket问题,就想到笔者2004年 ...

随机推荐

  1. python笔记四

    #!/usr/bin/env python3 from datetime import datetime, timedelta # datetime是模块,datetime模块还包含一个datetim ...

  2. 分类算法之朴素贝叶斯分类(Naive Bayesian classification)

    分类算法之朴素贝叶斯分类(Naive Bayesian classification) 0.写在前面的话 我个人一直很喜欢算法一类的东西,在我看来算法是人类智慧的精华,其中蕴含着无与伦比的美感.而每次 ...

  3. 理解云计算三种服务模式——IaaS、PaaS和SaaS

    云计算的服务模式仍在不断进化,但业界普遍接受将云计算按照服务的提供方式划分为三个大类: SaaS(Software as a Service–软件即服务) PaaS(Platform as a Ser ...

  4. CSS 兼容性调试技巧

    CSS HACK 针对不同浏览器,书写不同的CSS代码的过程,称为“CSS HACK”. 也就是说:写一个CSS代码,让IE6识别,其它浏览器不识别. 下面,针对不同浏览器,有几个符号: 这些符号是在 ...

  5. python安装requests第三方模块

    2018-08-28 22:04:51 1 .下载到桌面后解压,放到python的目录下 ------------------------------------------------------- ...

  6. 03_springboot2.x日志处理

    1.日志框架 ​ 市场上存在非常多的日志框架.JUL(java.util.logging),JCL(Apache Commons Logging),Log4j,Log4j2,Logback.SLF4j ...

  7. 爬虫所需要的文档和自动化文本driver下载地址,以及制作词云的文档,api等

    Scrapy1.7.3文档 webdriver文档 webdriver下载地址 Chrom各版本下载地址 词云1.5文档 selenium中文文档 vue数据可视化文档 element开发组件 其他好 ...

  8. 跳过爱奇艺优酷vip

      1.google chrome浏览器  2.下载插件安装 Tampermonkey  https://pan.baidu.com/s/1qvRQD2UO6gPHogjtSUBwUw       将 ...

  9. PostgreSQL问题解决--连接数过多

    I am trying to connect to a Postgresql database, I am getting the following Error: Error:org.postgre ...

  10. JedisCluster API 整理

    windows版redis启动服务器命令:redis-server redis.windows.conf 图表来自菜鸟教程: 列表的操作命令 序号 命令及描述 1 BLPOP key1 [key2 ] ...