1. 程式人生 > >我所理解的TextureCache,SpriteFrameCache,AnimationCache

我所理解的TextureCache,SpriteFrameCache,AnimationCache

最近在自學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 );

執行動畫。

好了,很簡單的描述,因為我理解的也不夠深刻,在此記下,以後備用。