Cocos Studio UI 图片加载改为异步

Cocos Studio制作的UI资源,可以用CSloader加载,他在加载的过程中是同步的,也就是必须把所有的图片资源加载完毕才会返回,如果图片资源很多很大,在手机上会造成比较长的卡顿。

为了解决这个问题,自然而然想到的就是改为异步,方法也比较简单,找到CSLoader里面加载图片资源的代码SpriteReader.cpp。

在这个类的setPropsWithFlatBuffers方法里面,有一个switch语句,当case 0 的时候加载图片资源。

可以看到代码如下:

sprite->setTexture(path);

同步加载图片就在这里了,将其修改为:

Director::getInstance()->getTextureCache()->addImageAsync(path, [=](Texture2D * texture){
sprite->setTexture(texture);
});

就能解决同步改异步的问题了。

实践过程中偶尔会报错,主要一个原因就是在这个异步加载过程中,sprite可能已经被销毁,为了防止报错,给sprite调用retain方法,避免销毁。改后的代码如下:

sprite->retain();
Director::getInstance()->getTextureCache()->addImageAsync(path, [=](Texture2D * texture){
sprite->setTexture(texture);
sprite->release();
});

自此,图片异步加载已经修改完毕。

最后的效果就是,面板可以瞬间生成,然后用户可以看到面板里面的图片一张一张的显示出来。

但在实践过程中,出现一个问题,那就是图片真的是一张一张的显示出来的,当图片比较多的情况下,面板完全显示的时间会比较长,就算图片有重用,重用的图片依然是一张一张的显示。

这个问题的原因出在TextureCache类里面,出门右转:TextureCache类的加载方式优化

posted @ 2015-10-20 16:09  玉腰  阅读(888)  评论(0编辑  收藏  举报