/*SpriteFrameCache*/
//通过plist和对应的png文件,把一批精灵添加到帧缓存中
SpriteFrameCache::getInstance()->addSpriteFramesWithFile("fish.plist", "fish.png");
//从帧缓存中获取一个精灵
auto sp = Sprite::createWithSpriteFrameName("fish01_01.png");
sp->setAnchorPoint(Vec2(0, 0));
sp->setPosition(Vec2(0, 300));
addChild(sp, 9);
/*TextureCache*/
//创建一个精灵,同时把精灵图片添加到纹理缓存中
auto sp1 = Sprite::createWithTexture(Director::getInstance()->getTextureCache()->addImage("HelloWorld.png"));
sp1->setPosition(Vec2(300, 300));
sp1->setScale(0.5f);
addChild(sp1, 8);
//从纹理缓存中获取一个图片来创建精灵
auto sp11 = Sprite::createWithTexture(Director::getInstance()->getTextureCache()->getTextureForKey("HelloWorld.png"));
sp11->setPosition(Vec2(300, 100));
sp11->setScale(0.5f);
addChild(sp11, 8);
/*AnimationCache*/
//从SpriteFrameCache中获取每一帧组成动画
Vector<SpriteFrame*> sps;
for (int i = 1; i < 11; i++)
{
char buf[30] = {0};
sprintf_s(buf, "fish03_%02d.png", i);
auto spfm = SpriteFrameCache::getInstance()->getSpriteFrameByName(buf);
sps.pushBack(spfm);
}
auto animation = Animation::createWithSpriteFrames(sps, 0.2f);
//animation->setLoops(100);
//把动画添加到AnimationCache中
AnimationCache::getInstance()->addAnimation(animation, "fish");
//从AnimationCache中获取动画创建一个动画动作
auto animate = Animate::create(AnimationCache::getInstance()->getAnimation("fish"));
auto sp33 = Sprite::create();
sp33->setPosition(Vec2(100, 300));
addChild(sp33, 9);
//重复执行这个动画动作
sp33->runAction(RepeatForever::create(animate));
- TextureCache是最底层也是最有效的纹理缓存,缓存的是加载到内存中的纹理资源,也就是图片资源。
- SpriteFrameCache精灵框帧缓存,缓存的是精灵帧。
- SpriteFrameCache是基于TextureCache上的封装。缓存的是精灵帧,是纹理指定区域的矩形块。各精灵帧都在同一纹理中,通过切换不同的框帧来显示出不同的图案。