关于Cocos2d-x多线程异步载入资源的问题
2013-12-14 21:51
597 查看
我们通常使用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、在异步线程载入其他资源。
但是当运行程序的时候却出现了问题:载入的资源都没有办法正常显示了。而改到主线程又正常了,仔细检查能够确定线程中的资源载入确实被调用了,到底哪里出了问题?
根据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、在异步线程载入其他资源。
相关文章推荐
- cocos2dx 2.2 配置 Android环境
- Cocos2d-x从C++端调用Android端的非静态函数接口
- 【cocos2d-x IOS游戏开发-城市跑酷11】设置菜单层及新的开始
- 【cocos2d-x IOS游戏开发-城市跑酷10】完善繁荣的城市街区及地形图类
- 【Pia日记】cocos2d-x 如何根据Tag判断子节点是否存在
- cocos2d-x 博客整理
- cocos2d-x 3.0alpha1+ cocostudio工程搭建
- cocos2d-x CCDictionary 中CCDictElement的key长度优化
- cocos2dx常见的46中+22中动作详解
- cocos2d-x/C++ 基础
- 【Pia开发日记】cocos2d-x CCSprite被AddChild后出现Bug,而CCLayer不会
- Cocos2d-x中通过JNI进行C++调用Java代码
- [Cocos2d-x]CCSpriteBatchNode的使用
- cocos2d视频教程
- Cocos2d-x扩展类中UIImageView类的使用疑问
- cocos2d-x引擎库binary版本制作(Windows环境)
- Cocosd-x设计模式之四 :外观模式
- Cocosd-x设计模式之三:管理者模式
- 从Delphi开始学Cocos2dx-3.0[3]:CCNode 可视组件的头
- 从Delphi开始学Cocos2dx-3.0[2]:TObject 与 CCObject 看继承关系