这是一个很好的OO设计吗?

时间:2011-05-23 15:39:59

标签: oop architecture skeletal-animation

我正在为自己构建一个API来进行2D骨架动画。

我有一个Bone课程 和一个骷髅课。

Skeleton创建一个根骨,然后通过提供父骨骼,通过Skeleton的add方法添加后续骨骼。

我现在要做的是添加动画和帧。

我在想的是一个可以加载和插入动画的类。所以这将是一个加载动画的对象。然后,它将在每个帧中接收一个Skeleton并相应地修改Skeleton。

这是一个好设计吗?动画是否应该采用Skeleton,或者Skeleton是否应该接受动画并将其应用到自身?

3 个答案:

答案 0 :(得分:7)

最好创建一个使用Skeleton而不是相反的动画。这是因为,从逻辑上讲,对象Skeleton不需要动画生存,但动画强烈需要一个Skeleton。 所以你可以在动画本身中耦合这些元素。不要在对象中放入太多逻辑,并尝试将其放在必要的位置。

答案 1 :(得分: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));
        }
    }
}

答案 2 :(得分:0)

我会创建一个Animation类,其中包含std::vector<Skeleton>数据成员,您可以使用该成员操作每个帧上的单个Skeleton个对象,或者插入多个Skeleton个对象。从关键帧的矢量。然后,当你“播放”动画时,你只需要迭代向量,调出每个Skeleton对象,并将其传递给将在屏幕上显示结果的其他函数或类(或做其他任何事情) Skeleton可用于,例如扭曲网格等。)

拥有一个动画对象可以更容易地操作动画的帧,允许你删除/替换帧等。否则,如果你试图将所有这些功能都集成到一个Skeleton对象中,那么你将会去当试图从动画序列中分别操纵骷髅的各个方面时,发现有很多包袱(即假设你需要为一段帧等改变骷髅的层次结构?等等......那将是非常容易的如果每个帧上都有一个Skeleton,但如果你有一个整体的Skelton对象则没有。)