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类的加载方式优化

转载于:https://www.cnblogs.com/junxiong/p/4895148.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值