精靈幀緩存是緩存的一種,緩存有如下幾種:
紋理緩存(texturecache)“。使用紋理緩存可以建立紋理對象,在上一節我們已經用到了。
精靈幀緩存(sritefranmecache)。能夠從精靈表中建立精靈幀緩存,然後再從精靈幀緩存中獲得精靈對象,反複使用精靈對象時候,使用精靈幀緩存可以節省記憶體消耗。
動畫緩存(animationcache)。動畫緩存主要用于精靈動畫,精靈動畫中的每一幀是從動畫緩存中擷取的。
這一個節我們主要介紹精靈幀緩存(spriteframecache),要使用精靈幀緩存涉及到的類有:spriteframe和spriteframecache。使用spriteframecache建立精靈對象的主要代碼如下:
上述代碼第①行是通過spriteframecache建立精靈幀緩存對象,它是采用單例設計模式進行設計的,getinstance()函數可以獲得spriteframecache單一執行個體,addspriteframeswithfile函數是将精靈幀添加到緩存中,其中spirtesheet.plist是坐标檔案。我們可以多次調用addspriteframeswithfile函數添加更多的精靈幀到緩存中。
第②行代碼sprite::createwithspriteframename("mountain1.png")是通過sprite的createwithspriteframename函數建立精靈對象,其中的參數mountain1.png是spirtesheet.plist是坐标檔案中定義的精靈幀名(見spirtesheet.plist檔案代碼中的第②行)。
下面我們會通過一個執行個體介紹精靈幀緩存使用,這個執行個體如下圖所示,在遊戲場景中有背景、山和英雄三個精靈。

在helloworldscene.cpp實作的init函數代碼如下:
上述代碼第①行是建立一個背景精靈對象,這個背景精靈對象,并不是通過精靈緩存建立的,而是直接通過精靈檔案直接建立的,事實上我們完全也可以将這個背景圖檔放到精靈表中。
第②行代碼是獲得精靈緩存對象。第③行代碼是通過addspriteframeswithfile函數為精靈緩存中添加精靈幀。在前面的介紹中我們使用一條語句spriteframecache::getinstance()->addspriteframeswithfile("spirtesheet.plist")替代第②和第③行兩條語句。在這裡我們分成兩條語句是因為後面我們還有使用framecache變量。
第④行代碼是使用sprite 的createwithspriteframename函數建立精靈對象,其中的參數是精靈幀的名字。
代碼第⑤~⑥行是使用精靈緩存建立精靈對象的另外一種函數,其中第⑤行代碼是使用精靈緩存對象framecache的getspriteframebyname函數建立spriteframe對象,spriteframe對象就是“精靈幀”對象,事實上在精靈緩存中存放的都是這種類型的對象。第⑥行代碼是通過精靈幀對象建立。第⑤和⑥行使用精靈緩存方式主要應用于精靈動畫時候,相關的知識我們将在精靈動畫部分介紹。
精靈緩存不再使用後忘記清空或移除相關精靈幀,否則如果有相同名稱的精靈幀時候,就會出現一些奇怪的現象。清空或移除精靈幀的緩存函數如下:
如果為了防止該場景中的精靈緩存對下一個場景産生影響,我們可以在目前場景所在層的onexit函數中調用這些函數,相關代碼如下:
onexit()函數是層退出時候回調的函數,與init函數類似都屬于層的生命周期中的函數。我們要在h檔案中定義,在cpp檔案中聲明。helloworld.h檔案的相關代碼如下:
歡迎加入cocos2d-x技術讨論群:257760386、327403678