【问题标题】:How to fix this design? I can't overload a method如何修复这个设计?我不能重载方法
【发布时间】:2011-06-28 05:16:49
【问题描述】:

我有一个名为 SpriteSheet 的基类,它有两个孩子,RotatedSpriteSheet 和 FlippedSpriteSheet。 SpriteSheet 包含帧,RotatedSpriteSheet 包含那些帧+用于旋转的帧,FlippedSpriteSheet 包含原始帧+翻转帧。

我有另一个名为 Sprite 的类,它引用了 SpriteSheet。 Sprite 存储其位置、当前动画帧、角度、图像是否翻转等。当 Sprite 更新其动画时,它会进行如下调用:

imageData = _spriteSheet.calculateFrame(animationFrame, flipped, angle);

如您所见,这是一个非常愚蠢的设计,因为 SpriteSheet 不应该有一个在基础 SpriteSheet 类不使用该数据时要求翻转或角度的函数。

我认为问题源于我不想拥有多个“Sprite”对象,例如 RotatedSprite、AlphadSprite、FlippedSprite、FlippedAndRotatedSprite……这似乎太麻烦了。

我能想到的唯一解决方案是,不是 calculateFrame() 获取动画帧、翻转状态和角度,而是将它传递给 Sprite 对象的引用并让 SpriteSheet(及其子对象)“检查”精灵并计算数据本身。这种设计的问题是我必须公开额外的数据,这些数据只对精灵本地(主要是动画数据)。我不认为这有什么大不了的。这是最好的解决方案吗?

感谢您的提示和建议。

【问题讨论】:

    标签: design-patterns language-agnostic


    【解决方案1】:

    创建一个单独的Transformation 层次结构,该层次结构封装了转换精灵或精灵表所需的所有信息。

    【讨论】:

    • 所以它就像calculateFrame(animationFrame, transformation)?那会有旋转、阿尔法等的所有细节吗?似乎比检查精灵对象更好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多