[Cocos2d-x v3.x]序列幀動畫

簡介
Cocos2d-x中,動畫的具體內容是依靠精靈顯示出來的,為了顯示動態圖片,我們需要不停切換精靈顯示的內容,通過把靜態的精靈變為動畫播放器從而實現動畫效果。動畫由幀組成,每一幀都是一個紋理,我們可以使用一個紋理序列來創建動畫。
我們使用Animation類描述一個動畫,而精靈顯示動畫的動作則是一個Animate對象。動畫動作Animate是精靈顯示動畫的動作,它由一個動畫對象創建,並由精靈執行。
創建方法
- 手動添加序列幀到Animation類
- 使用文件初始化Animation類
手動添加
手動添加的方法需要將每一幀要顯示的精靈有序添加到Animation類中,並設置每幀的播放時間,讓動畫能夠勻速播放。另外,還要通過`setRestoreOriginalFrame`來設置是否在動畫播放結束後恢複到第一幀。創建好Animation實例後,需要創建一個Animate實例來播放序列幀動畫。
|
在創建Animation實例時會用到以下幾個接口:
- `addSpriteFrame`,添加精靈幀到Animation實例
- `setDelayUnits`,設置每一幀持續時間,以秒為單位
- `setRestoreOriginalFrame`,設置是否在動畫播放結束後恢複到第一幀
- `clone`,克隆一個該Animation實例
文件添加
首先我們來了解下需要用到的AnimationCache類。AnimationCache可以加載xml/plist文件,plist文件裏保存了組成動畫的相關信息,通過該類獲取到plist文件裏的動畫。
在使用AnimationCache類時會用到以下幾個接口:
- `addAnimationsWithFile`,添加動畫文件到緩存,plist文件
- `getAnimation`,從緩存中獲取動畫對象
- `getInstance`,獲取動畫緩存實例對象
使用文件添加的方法隻需將創建好的plist文件添加到動畫緩存裏麵,plist文件裏包含了序列幀的相關信息。再用動畫緩存初始化Animation實例,用Animate實例來播放序列幀動畫。
|
`注意:`3.0開始,Cocos2d-x使用getInstance來獲取單例實例。
動畫緩存(AnimationCache)
通常情況下,對於一個精靈動畫,每次創建時都需要加載精靈幀,按順序添加到數組,再創建對應動作類,這是一個非常煩瑣的計算過程。對於使用頻率高的動畫,比如走路動畫,將其加入緩存可以有效降低每次創建的巨大消耗。由於這個類的目的和緩存內容都非常簡單直接,所以其接口也是最簡單了的,如下所示:
- 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),獲得事先存入的動畫
`建議:`在內存警告時我們應該加入如下的清理緩存操作:
|
值得注意的是清理的順序,我們推薦先清理動畫緩存,然後清理精[靈幀緩存](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)。按照引用層級由高到低,以保證釋放引用有效。
最後更新:2017-04-03 12:56:39