4

2D 骨格アニメーションを行うための API を自分で構築しています。

Bone クラスと Skeleton クラスがあります。

Skeleton はルート ボーンを作成し、親ボーンを提供することにより、Skeleton の add メソッドを介して後続のボーンが追加されます。

今やりたいことは、アニメーションとフレームを追加することです。

私が考えていたのは、アニメーションを読み込んで補間できるクラスです。つまり、アニメーションをロードするオブジェクトになります。次に、各フレームでスケルトンを取り込み、それに応じてスケルトンを変更します。

これは良いデザインですか?アニメーションはスケルトンを取り込む必要がありますか、それともスケルトンがアニメーションを取り込んでそれ自体に適用する必要がありますか?

4

3 に答える 3

7

その逆ではなく、スケルトンを使用するアニメーションを作成することをお勧めします。これは、論理的に言えば、オブジェクト Skeleton が存在するために Animation を必要としないためですが、Animation は Skeleton を強く必要とします。したがって、アニメーション自体でこれらの要素を結合できます。オブジェクトにロジックを入れすぎず、必要な場所にのみ配置するようにしてください。

于 2011-05-23T15:48:18.317 に答える
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));
        }
    }
}
于 2011-05-23T15:50:44.167 に答える
0

各フレームの個々のオブジェクトを操作したり、キーフレームからのベクトル内の複数のオブジェクトを補間したりするために使用できるデータメンバーをAnimation含むクラスを作成します。次に、アニメーションを「再生」するときは、ベクトルを反復処理して各オブジェクトを呼び出し、それを画面に結果を表示する他の関数またはクラスに渡すだけです(または他に役立つことができることは何でもします)。、メッシュのワープなど)std::vector<Skeleton>SkeletonSkeletonSkeletonSkeleton

アニメーションオブジェクトがあると、アニメーションのフレームの操作がはるかに簡単になり、フレームの削除/置換などが可能になります。それ以外の場合、この機能をすべてSkeletonオブジェクトに積み上げようとすると、そこにあることがわかります。アニメーションシーケンスとは別にスケルトンの個々の側面を操作しようとすると、多くの手荷物が発生します(つまり、フレームのセグメントなどのスケルトンの階層を変更する必要がある場合など)。各フレームにスケルトンがありますが、モノリシックスケルトンオブジェクトがある場合はそうではありません)。

于 2011-05-23T15:50:21.013 に答える