cocos2d-x中有三个缓存类,在v2.x都是全局单例模式。
动画缓存(AnimationCache)。动画缓存主要是用于精灵动画,精灵动画中的每一帧是从动画缓存中获取的。
在游戏中需要加载大量的纹理图片,这些操作都是很耗内存和资源的。
当游戏中有个界面要用到的图片非常多,第一次点进这界面时速度非常慢(因为要加载绘制很多图片)出现卡顿。我们可以使用TextureCache提前异步加载纹理,等加载结束,进入到这个界面再使用这些图片速度就会非常快。
Texture2D:纹理,即图片加载入内存后供CPU和GPU操作的贴图对象。
TextureCache:纹理缓存,用于加载和管理纹理。一旦纹理加载完成,下次可以使用它返回之前加载的纹理,从而减少对GPU和CPU内存的占用。
获取TextureCache
在v3.x中,TextureCache不再作为单例模式使用。而是作为Director的成员变量。
Director::getInstance()->getTextureCache();
Texture2D* texture=Director::getInstance()->getTexureCache()->addImage("icon.png");
Texture2D* texture=Direcot::getInstance()->getTexureCache()->getTextureForKey("icon.png");
通过getTextureForKey方法来获得这个key所对应的纹理缓存,如果这个Key对应的纹理不存在,那么就返回NULL。
Director::getInstance()->getTextureCache()->removeUnusedTextures();
感谢
http://www.tairan.com/archives/6378/
SpriteFrameCache主要服务于多张碎图合并出来的纹理图片。这种纹理在一张大图中包含了多张小图,直接通过TextureCache引用会有诸多不便,因而衍生出来精灵框帧的处理方式,即把截取好的纹理信息保存在一个精灵框帧内,精灵通过切换不同的框帧来显示不同的图案。
SpriteFrameCache的内部封装了一个Map_spriteFrames对象。key为帧的名称。SpriteFrameCache一般用来处理plist文件(这个文件指定了每个文件的精灵在这张”大图”里面的位置和大小),该文件对应一张包含多个精灵的大图,plist文件可以使用TexturePacker制作。
添加精灵帧的配置文件一个plist文件和一张大的纹理图。
SpriteFrameCache* cache=SpriteFrameCache::getInstance();
SpriteFrameCache::destroyInstance();
cache->addSpriteFramesWithFile("Sheet.plist");
cache->addSpriteFramesWithFile("Sheet.plist","Sheet.png");
SpriteFrameCache::getInstance()->addSpriteFramesWithFile("Sheet.plist");
auto frame_sp=Sprite::createWithSpriteFrameName("Sheet1.png");
this->addChild(frame_sp,0);
void removeSpriteFrameByName(const std::string &name);
void removeSpriteFrames();
void removeSpriteFramesFromFile(const std::string &plist);
void removeUnuesdSpriteFrames();
与TextureCache功能一样,将SpriteFrame缓存起来,在下次使用的时候直接去取。不过与TextuteCache不同的是,如果内存池中不存在要查找的图片,它会提示找不到,而不会去本地加载图片。
TextureCache是底层也是最有效的纹理缓存,缓存的是加载到内存中的纹理资源,也就是图片资源。
SpriteFrameCache精灵帧缓存,缓存的是精灵帧。
SpriteFrameCache是基于TextureCache上的封装。缓存的是精灵帧,是纹理指定区域的矩形块。各精灵帧都在同一纹理中,通过切换不同的框帧来显示出不同的图案。
Animation:就是动画,存储一个动画动作需要的所有帧。
Animate:动画动作,就是一个动作类,继承自AnctionInterval类,我们可以通过Animation来创建一个Animate,然后再执行这个动作。
AnimationCache: AnimationCache类是一个单例类,用于缓存所有的动画和动画帧。通常情况下,对于一个精灵动画,每次创建都需要加载精灵帧,按顺序添加到数组,再创建对应的动画类。
AnimationCache* cache=AnimationCache::getInstance();
AnimationCache::destroyInstance();
cache->addAnimationsWithFile("animations/animations-2.plist");
void addAnimation(Animation* animation,const std::string &name);
auto animation=Animation::createWithSpriteFrames(spriteFrameVec,0.1);
AnimationCache::getInstance()->addAnimation(animation,"dogs");
Animation* getAnimation(const std::string &name);
auto animate=Animate::create(AnimationCache::getInstance()->getAnimation("dogs"));