精灵帧缓存(SpriteFrameCache)
SpriteFrameCache 主要用于多张碎图合并纹理图片,纹理图片在一张大图中包含多张小图,通过TextureCache引用会存在诸多不便。因而衍生出精灵框帧的处理方式,把截取好的纹理信息保存在一个精灵框帧内,精灵通过切换不同框帧来显示不同的图案。
SpriteFrameCache内部封装了一个Map<std::string, SpriteFrame*> _spriteFrames
对象,key
为帧名称。
SpriteFrameCache用来处理plist
文件,plist
文件保存每个独立精灵在大图中的位置和大小信息,plist
文件对应一张包含多张精灵的大图,plist
文件可使用 TexturePacker 制作。
SpriteFrameCache 常用接口和 TextureCache 类似,唯一需要注意的是添加精灵帧的配置文件是一个plist
文件和一张大的纹理图。
SpriteFrameCache跟TextureCache功能一样,将SpriteFrame缓存起来,在下次使用时直接去获取。不过跟TextureCache不同的是,如果内存池不存在要查找的图片,会提供找不到,而不会去本地加载图片。
- TextureCache是最底层也是最有效的纹理缓存,缓存是加载到内存中的纹理资源,也就是图片资源。
- SpriteFrameCache精灵框帧缓存,缓存的是精灵帧。
- SpriteFrameCache是基于TextureCache上的封装,缓存的是精灵帧,是纹理指定区域的矩形块。所有精灵帧都在同一个纹理中,通过切换不同的框架来显示出不同的图案。
常用SpriteFrameCache接口
- 获取单例SpriteFrameCache对象
SpriteFrameCache* cache = SpriteFrameCache::getInstance();
- 销毁SpriteFrameCache对象
SpriteFrameCache::destroyInstance();
- 使用SpriteFrameCache获取指定的精灵帧,创建精灵对象。
SpriteFrameCache *sfc = SpriteFrameCache::getInstance();
sfc->addSpriteFramesCacheWithFile("pic.plist", "pic.png");
// 从精灵帧缓存中查找pic1.png图片
auto frame = Sprite::createWithSpriteFrameName("pic1.png");
this->addChild(frame, 2);
使用注意
quick:
display.addSpriteFramesWithFile("image/role.plist", "image/role.pvr.ccz");
------------------------------------------------------------------------------------------
attempt to call method 'addSpriteFramesWithFile' (a nil value)
-------------------------------------------------------------------------------------------
不同版本的接口名称已做调整,可使用
display.addSpriteFrames("images/role.plist", "images/role.pvr.ccz")