cocos2d-x開發記錄:二,基本概念(骨骼動畫)


九,骨骼動畫

1.骨骼動畫vs Sprite sheets

你能使用sprite sheets 創建動畫,它很快又容易。直到你意識到你的游戲需要大量的動畫並且內存消耗越來越高,並且需要時間載入全部數據。為了限制大小,你需要為動畫限制到比較低的FPS,然后動畫看起來不會如你所期望的那么平滑。這時你就需要骨骼動畫了。

 

2.骨骼動畫簡介

骨骼動畫在cocos2d-x動畫是一個技術,一個角色由兩部分組成:一個顯示的表皮和類似人骨頭樣的網格。

Cocos2d-x提供了一種方式來在你的應用程序中使用2 D骨骼動畫。骨骼動畫設置的過程可能有些復雜,但使用起來很容易,當然有一些工具能簡化這個過程。當使用骨骼動畫時,動畫是由幾個骨頭批次連接組成。影響一個骨頭也會影響它下面的所有子元素。通過在每個骨頭不同的組合轉換,你可以獲得不同姿勢的骨架。

如果對於一個時間點的每個骨骼使用某個轉換定義關鍵幀,你能插入關鍵幀來讓骨骼動畫更為平滑。附加代碼中,我使用一個類,名叫Transformation,它包含2D轉換數據,如平移,旋轉,縮放。然后一個關鍵幀通過一個幀數被定義成一個這樣的轉換。一個關鍵幀定義了一個KeyframeAnimation的集合。最后一個SkeletonAnimation是一個KeyframeAnimations集合,一個用於每個骨骼。另外,你使用一個骨骼,保持關節的列表定義骨骼的層次結構。不同於sprite sheets每個骨頭分配特定的紋理,如下圖所示:

 

 

3.骨骼動畫的工具

據我們所知,CocosBuilder 是一個很好的免費的創建骨骼動畫的工具。CocosBuilder於Javascript綁定構建Cocos2d,這意味着你的代碼,動畫,接口將會在cocos2d-x中無修改運行。

4.使用cocosbuilder動畫

你能使用CocosBuilder來創建角色動畫 ,場景動畫或任何你能想象到的動畫。動畫編輯器已經完全支持多個解決方案,關鍵幀,骨骼動畫和多個時間線等。在主窗口的底部你可以找到時間軸。你使用時間線來創建你的動畫。

默認情況下你的ccb-file文件有一個單獨的10秒長度的時間線。CocosBuilder編輯動畫在每秒30幀的幀率下,當你在cocos2d中你的應用在播放動畫時,卻是60幀/每秒(默認)。當前時間顯示在右上角,格式為分鍾:秒鍾:幀。藍色的垂直線顯示當前時間。點擊time顯示改變當前時間線的間隔。

 

5.添加關鍵幀

在CocosBuilder中動畫是基於關鍵幀的。你能添加關鍵幀到不同屬性的一個節點中並且CocosBuilder會自動插入到關鍵幀之間,任意不同類型的容位中。為了添加一個關鍵幀,首先通過點擊名字右邊的三角形來展開視圖節點。它會展示所有的節點動畫屬性。取決於你選擇的節點類型,動畫會有略微不同。一旦屬性可見,那么你能點擊時間線中用可選的屬性。在點擊的時候這會創建一個新的關鍵幀。或者,你可以通過選擇一個節點創建一個新的關鍵幀,然后選擇插入關鍵幀動畫菜單。如果你在畫布局域轉換一個節點,關鍵幀會自動添加到當前時刻,考慮到轉換后的屬性在時間軸上已經有一個或多個關鍵幀。

 

6.編輯關鍵幀

你編輯一個特定節點的關鍵幀通過移動時間標記到關鍵幀的時刻並選擇這個節點。通過雙擊它你能集中一個關鍵幀。通過拖動它們周圍的選擇框,你能選擇關鍵幀並且一起移動它們。你也可以在節點之間復制和粘貼關鍵幀。在粘貼關鍵幀時確保你僅有一個已選擇的關鍵幀。這個關鍵幀將會粘貼到時間標記是起始位置。如果你選擇一組關鍵幀,那么通過選擇反向選擇關鍵幀動畫菜單可以扭轉他們的順序。使用拉伸選擇關鍵幀選項來加快或減慢一個動畫的一個比例系數。

 

7.導入一個圖像序列

如果你有一個通過sprite創建出來的幀動畫,它被乏味到移動到時間線每一個幀中。CocosBuilder簡化了這個過程通過自動導入一個圖像序列。在工程視圖的左手邊選擇你想要導入的關鍵幀,然后在時間線上選擇一個CCSprite。現在在動畫菜單中選擇Create Frames from Selected Resources。這關鍵幀將會自動被創建在標記的起始位置。如果你需要讓動畫慢下來,選擇新創建的關鍵幀並使用Stretch Selected Keyframes命令

8.使用 Easing

CocosBuilder提供一個可選的cocos2d提供的easings子集。在2個關鍵幀中右鍵並選擇你想要應用的easing。

一些easings有額外的選項,在easing之后你能再次點擊右鍵運用

 

9.使用多個時間線

CocosBuilder的動畫編輯器一個非常強大的特性就是在一個單一的文件中可以有多個時間線。你能為不同的序列命名並使用它們的名字在代碼中播放它們。在不同的時間線中它們也能平滑的轉換。

使用時間線彈出菜單,選擇,添加,編輯你的時間線。

在編輯時間線的對話框中你能獲得你時間線的概述並重命名它們,添加新的一個並設置一個時間線當ccbi-file裝入你的應用程序直接自動開始播放。

在時間線中沒有關鍵幀設置可以跨時間線來共享它們的屬性值。例如,如果你在一個時間線中移動一個節點,只要它們沒有一個關鍵幀設置position屬性,它將被移到所有時間線中。有時添加一個單一的關鍵幀到一個屬性中,為一個特定的時間線,覆蓋了共享值是很有用的。

 

10.鏈接時間線

你可以自動播放時間序列通過鏈接它們。你還可以使用這個特性來自動循環的時間表。

在有時間線的播放序列中,點擊No chained timeline文本並選擇你想要播放當前幀之后的時間線。

 

11.在代碼中播放動畫

以編程方式控制你通過CocosBuilder創建的動畫,你就需要找到CCBAnimationManager。當ccbi-file被載入時,動畫manager將分配到節點userObject。

CCNode *myNodeGraph = ccbReader->readNodeGraphFromFile("myFile.ccbi", this);

 

動作管理器將返回一個autoreleased對象。播放一個特定的時間線調用runAnimationsForSequenceNamed方法。如果一個時間線是當前正在被播放,當調用這個方法時,它將立即停止。

animationManager->runAnimationsForSequenceNamed("My Timeline");

 

還有一種可選的情況,你能使用一個在間隔時間期間到平滑轉換的新時間線。在可能的情況下線性加速器將被用於轉換。

animationManager->runAnimationsForSequenceNamedTweenDuration("My Timeline",0.5f);

 

也可以檢索一個回調,每當一個時間線完成播放時。在序列中你將接收這些回調,即使另一個時間線被鏈接了。使用CCBAnimationManagerDelegate來接收這些回調。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM