cocos2dx纹理缓存
本文由qinning199原创,转载请注明:http://www.cocos2dx.net/?p=131
一、介绍
被缓存的纹理之后还能被用来绘制。但是每一个被缓存图片的大小、颜色和纹理框都不能被改变。这个信息被存储在内存中因此不用每次绘制的时候再发送到GPU中。
二、CCTextureCache
Cocos2dx 借助CCTextureCache或者CCSpriteFrameCache来使用纹理缓存来保持CCSprite。你可以提前把纹理加载进缓存中并且在场景中一直可用。如何加载这些纹理需要你自己根据实际情况决定。比如,你可以选择异步加载他们,或者使用有滚动条的加载页面来加载他们。
当你创建了一个精灵,你一般会这么用CCSprite::create(pszFileName),如果你看看这个CCSprite::create(pszFileName)函数的内部实现方法,你将会发现它添加这些图片到了纹理缓存中:
bool CCSprite::initWithFile(const char *pszFilename){ CCAssert(pszFilename != NULL, "Invalid filename for sprite"); CCTexture2D *pTexture = CCTextureCache::sharedTextureCache()->addImage(pszFilename); if (pTexture) { CCRect rect = CCRectZero; rect.size = pTexture->getContentSize(); return initWithTexture(pTexture, rect); }//不要释放,当加载纹理失败,相比崩溃来说,获取一个透明的精灵可能更好一些 // this->release(); return false;}
单例模型解决了纹理加载。一旦你的纹理被加载进来,下一次使用的时候它将会返回一个之前已经加载了的纹理的引用,而不是重新加载,这样就减少了GPU&CPU内存。
CCSpriteFrameCache单例是所有精灵帧的缓存。我们可以通过一个精灵片以及它的相关联的xml文件来将多个精灵加载进缓存中。从缓存里我们可以创建精灵对象。
纹理通常是一个里面包含着很多小的纹理的大图片。如下图片就是其中一个纹理。
有三种方式来加载纹理到CCSpriteFrameCache中:
1、一个xml(plist)文件
2、一个xml(plist)文件和一个纹理
3、一个CCSpriteFrame和一个精灵帧名字
(查看所有的apiCCSpriteFrameCache API)
四、示例代码:
CCSpriteFrameCache* cache = CCSpriteFrameCache::sharedSpriteFrameCache();cache->addSpriteFramesWithFile("family.plist", "family.png");