Cocos精灵帧缓存


精灵帧就是多个小图组成的一张大图,这样减少了加载次数。且大图的“边角料”比小图的要少很多,提高了内存使用率。

一般来说,精灵帧由plist(描述文件)和一张大图组成。(可以用TexturePacker——一种专业软件将若干小图生成一份精灵帧)

精灵帧缓存:也是单例

SpriteFrameCache* cache = SpriteFrameCache::getInstance();

添加精灵帧缓存(plist文件):cache->addSpriteFramesWithFile("animations/grossini_blue.plist");//addSpriteFramesWithFile会自动解析plist文件,将plist中描述的所有精灵帧加载到内存

获取精灵帧SpriteFrame* frame = cache->getSpriteFrameByName("grossini_blue_01.png");注意这里的参数是plist中的小图片名称

使用精灵帧Sprite* sprite = Sprite::createWithSpriteFrame(frame);参数是纹理名

或者: Sprite* sprite = Sprite::createWithSpriteFrameName("grossini_blue_01.png");这里的参数也是plist中的小图片名称

删除精灵帧:removeSpriteFrameByName()——单个清除  emoveSpriteFrames()——全清除     

                            removeSpriteFrameFromFile(plist)——按文件清除

删除工作常常用在场景切换时删除旧场景缓存。

和纹理缓存的关联:

当精灵帧缓存的plist文件添加之后,大图就被添加到了纹理缓存中去了,而精灵帧缓存中就存留了一个个小图的信息,包括小图的Texturre2D对象(即小图本身)以及其位置信息Rect对象,此外还有小图对大图的retain引用关联(就是为了防止纹理缓存清除之后大图消失)。故此每一张大图都被其小图们引用着。那么在切换时必然也要清除精灵帧缓存了。

 

你可能感兴趣的:(Cocos精灵帧缓存)