2011-05-23 112 views
4

我正在爲自己構建一個API來做2D骨骼動畫。這是一個很好的面向對象設計嗎?

我有一個骨類 和一個骨架類。

骨架創建根骨骼,然後通過提供父骨骼通過骨架的添加方法添加後續骨骼。

我現在想要做的是添加動畫和框架。

我在想什麼,是一個可以加載和內插動畫的類。所以這將是一個可以加載動畫的對象。然後,在每個框架中,接受一個骨架並相應地修改骨架。

這是一個很好的設計?動畫應該採用骷髏還是骷髏應該採用動畫並將其應用到自身上?

回答

7

最好創建一個使用骨架而不是相反的動畫。這是因爲,從邏輯上講,對象骨架不需要動畫來存活,但動畫強烈需要骨架。 所以你可以在動畫本身中結合這些元素。不要在對象中放置太多的邏輯,並儘量在必要的地方放置它。

+0

我明白了,所以我應該基於它的依賴性。謝謝! – jmasterx 2011-05-23 15:49:40

+1

嗯,我認爲,最好的實現方式在對象之間有更少的耦合。所以你應該儘可能在必要而不是到處鏈接它們。 – marzapower 2011-05-24 07:25:05

0

我將創建包含可用於從關鍵幀操縱每個幀單獨Skeleton對象或跨多個插值在矢量Skeleton對象std::vector<Skeleton>數據成員的Animation類。然後,當您「播放」動畫時,您只需遍歷矢量,調出每個對象,然後將其傳遞給其他函數或類,以便在屏幕上顯示結果(或執行任何其他操作對網格等變形很有用)

擁有一個動畫對象將使它更容易操縱動畫的幀,允許您刪除/替換幀等。否則,如果您嘗試將所有將這個功能集成到一個Skeleton對象中,那麼當試圖從動畫序列中單獨處理Skeleton的各個方面時,你會發現有很多包袱(也就是說,假設你需要改變Skeleton的層次結構框架等?......如果每個框架上有一個骨架,那麼這將非常容易,但是如果您有一個單體框架,則不是那麼容易斯凱爾頓物體)。

1

大概每個骨骼都有一個2D位置/角度,動畫是一組幀,其中每個幀都是骨骼標識符和位置/角度的集合?

那麼你可以考慮像

public class Skeleton 
{ 
    public List<Bone> Bones {get;set;} 
    public void Animate(Animation animation) 
    { 
     foreach(Bone bone in Bones) 
     { 
      bone.Displace(animation.Displacements.FirstOrDefault(o=>o.BoneId == bone.BoneID)); 
     } 
    } 
} 
相關問題