CCTextureCache和CCSpriteFrameCache

来源:互联网 发布:长沙房地产 知乎 编辑:程序博客网 时间:2024/05/27 06:54
为了节省资源,我们通常将很多的小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,constCCRect& rect)

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

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

0 0