我所理解的TextureCache,SpriteFrameCache,AnimationCache

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/abcxingjun/article/details/51510770

最近在自学cocos2d-x,在这总结下cocos2d-x中缓存的使用

不管是游戏背景还是人物精灵还是动画,都是一张张的图片,要想使用这些图片,我想cocos2d-x 底层是应用openGL纹理贴图方式,将图片加载如内存。以上三种缓存机制,都是为了减少内存的多次读写,来提高游戏效率(本人菜鸟,有不对的望指出–)

1、TextureCache:
纹理缓存,最基本的缓存,SpriteFrameCache,AnimationCache这两个都是以纹理缓存为基础的。
跟过代码:

        Texture2D *texture = Director::getInstance()->getTextureCache()->addImage(texturePath.c_str());

纹理缓存是通过这句将图片加入缓存,生成Texture2D对象,此时就可通过次对象创建精灵CCSprite::createWithTexture(texture)

这里的图片可以是单个精灵图片,也可以是plist文件对应的拼图,
addImage的原理就不说了,因为我也不知道。。

SpriteFrameCache:
精灵帧缓存,通常是加载plist文件与拼图:

CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("*.plist");

跟进这句源码,可以看到也是先使用TextureCache缓存加载图片

addSpriteFramesWithDictionary(dict, texture);

此句是plist文件与 Texture2D对象的对应,plist文件中记录了拼图中你所要找的图片的信息,包括位置、大小,名字等。
这样就可以通过

CCSprite::createWithSpriteFrame(CCSpriteFrameCache::sharedSpriteFrameCache()->getSpriteFrameByName("background.png"));

来创建精灵,比起一张一张图片创建要快的多,因为图片是一次加载进来的嘛。

AnimationCache:
动画缓存,跟了下源码,感觉这个简单,

void AnimationCache::addAnimation(Animation *animation, const std::string& name)
{
    _animations.insert(name, animation);
}

就是把创建好的动作序列,加入一个MAP,name为MAP的key值,
使用这个key值就可以找到该动作序列(CCAnimation):

    CCAnimation* panimation = CCAnimationCache::sharedAnimationCache()->animationByName("keyAnimotion");

然后:

CCAnimate* aimate = CCAnimate::create(panimation);

创建动画 CCAnimate 才是真正的动画,
最后:

psprite->runAction(aimate );

运行动画。

好了,很简单的描述,因为我理解的也不够深刻,在此记下,以后备用。

猜你喜欢

转载自blog.csdn.net/abcxingjun/article/details/51510770
今日推荐