CCTextureCache和CCSpriteFrameCache

为了节省资源,我们通常将很多的小png合成一张然后配合图片的pList信息(使用TexturePicker)可以节约内存资源,
CCSpriteFrameCache *cache = CCSpriteFrameCache::sharedSpriteFrameCache();
cache->addSpriteFramesWithFile("test.plist", "test.png");

进入到该方法内部可以看到:

void CCSpriteFrameCache::addSpriteFramesWithFile(const char* plist, const char* textureFileName)
{
    CCAssert(textureFileName, "texture name should not be null");
    CCTexture2D *texture = CCTextureCache::sharedTextureCache()->addImage(textureFileName);

    if (texture)
    {
        addSpriteFramesWithFile(plist, texture);
    }
    else
    {
        CCLOG("cocos2d: CCSpriteFrameCache: couldn't load texture file. File not found %s", textureFileName);
    }
}

可以看到 ,SpriteFrameCache使用了CCTextureCache,将图片添加到了纹理缓存中

在其中的addSpriteFrameWithFile中,cocos2d会去解析这个pList,然后遍历pList,根据pList的信息,来创建CCSpriteFrame,以 CCDictionary* m_pSpriteFrames;来保存这写信息,spriteFrame中存储有该贴图引用(大图),以及贴图的位置。

所以我们在使用的时候可以通过

CCSprite *player = CCSprite::createWithSpriteFrameName("*.png");//会在shareFrameCache中取得这个frame

这种方式来取得一个sprite,这种方式的本质还是

CCSprite* CCSprite::createWithTexture(CCTexture2D *pTexture,const CCRect& rect)

通过这种方式来创建一张图片

所以真正缓存的并不是CCSprite而是SpriteFrame和一个Texture

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值