簡單介紹
Cocos2d-x中。動畫的詳細內容是依靠精靈顯示出來的,爲了顯示動態圖片,咱們需要不停切換精靈顯示的內容。經過把靜態的精靈變爲動畫播放器從而實現動畫效果。動畫由幀組成,每一幀都是一個紋理,咱們可以使用一個紋理序列來建立動畫。
咱們使用Animation類描寫敘述一個動畫,而精靈顯示動畫的動做則是一個Animate對象。git
動畫動做Animate是精靈顯示動畫的動做。它由一個動畫對象建立,並由精靈運行。github
建立方法
- 手動加入序列幀到Animation類
- 使用文件初始化Animation類
手動加入
手動加入的方法需要將每一幀要顯示的精靈有序加入到Animation類中。並設置每幀的播放時間,讓動畫能夠勻速播放。另外。還要經過`setRestoreOriginalFrame`來設置是否在動畫播放結束後恢復到第一幀。建立好Animation實例後。需要建立一個Animate實例來播放序列幀動畫。數組
複製代碼
- auto animation = Animation::create();
- for( int i=1;i<15;i++)
- {
- char szName[100] = {0};
- sprintf(szName, "Images/grossini_dance_%02d.png", i);
- animation->addSpriteFrameWithFile(szName);
- }
- // should last 2.8 seconds. And there are 14 frames.
- animation->setDelayPerUnit(2.8f / 14.0f);
- animation->setRestoreOriginalFrame(true);
-
- auto action = Animate::create(animation);
- _grossini->runAction(Sequence::create(action, action->reverse(), NULL));
|
在建立Animation實例時會用到下面幾個接口:
- `addSpriteFrame`,加入精靈幀到Animation實例
- `setDelayUnits`。設置每一幀持續時間,以秒爲單位
- `setRestoreOriginalFrame`,設置是否在動畫播放結束後恢復到第一幀
- `clone`。克隆一個該Animation實例
文件加入
首先咱們來了解下需要用到的AnimationCache類。AnimationCache可以載入xml/plist文件,plist文件中保存了組成動畫的相關信息,經過該類獲取到plist文件中的動畫。緩存
在使用AnimationCache類時會用到下面幾個接口:
- `addAnimationsWithFile`。加入動畫文件到緩存,plist文件
- `getAnimation`,從緩存中獲取動畫對象
- `getInstance`。獲取動畫緩存實例對象
使用文件加入的方法僅僅需將建立好的plist文件加入到動畫緩存裏面。plist文件中包括了序列幀的相關信息。動畫
再用動畫緩存初始化Animation實例,用Animate實例來播放序列幀動畫。
url
複製代碼
- auto cache = AnimationCache::getInstance();
- cache->addAnimationsWithFile("animations/animations-2.plist");
- auto animation2 = cache->getAnimation("dance_1");
-
- auto action2 = Animate::create(animation2);
- _tamara->runAction(Sequence::create(action2, action2->reverse(), NULL));
|
`注意:`3.0開始。Cocos2d-x使用getInstance來獲取單例實例。
動畫緩存(AnimationCache)
一般狀況下,對於一個精靈動畫。每次建立時都需要載入精靈幀,按順序加入到數組,再建立相應動做類,這是一個很煩瑣的計算過程。對於使用頻率高的動畫。比方走路動畫。將其加入緩存可以有效減小每次建立的巨大消耗。由於這個類的目的和緩存內容都很easy直接。因此其接口也是最簡單了的。例如如下所看到的:
- static AnimationCache* getInstance(),全局共享的單例
- void addAnimation(Animation *animation, const std::string& name),加入一個動畫到緩存
- void addAnimationsWithFile(const std::string& plist)。加入動畫文件到緩存
- void removeAnimation(const std::string& name),移除一個指定的動畫
- Animation* getAnimation(const std::string& name),得到事先存入的動畫
`建議:`在內存警告時咱們應該增長例如如下的清理緩存操做:
spa
複製代碼
- void releaseCaches()
- {
- AnimationCache::destroyInstance();
-
- SpriteFrameCache::getInstance()->removeUnusedSpriteFrames();
-
- TextureCache::getInstance()->removeUnuserdTextures();
- }
|
值得注意的是清理的順序,咱們推薦先清理動畫緩存。而後清理精[靈幀緩存](https://github.com/chukong/cocos-docs/blob/master/manual/framework/native/v3/spriteframe-cache/zh.md),最後是[紋理緩存](https://github.com/chukong/cocos-docs/blob/master/manual/framework/native/v3/texture-cache/zh.md)。依照引用層級由高到低。以保證釋放引用有效。 code