0

想象一下,你有 300 个不同类型的单元。每个单位都有不同的特殊能力。例如,如果 unit18 靠近一棵树,它就会变得不可见。Unit33 和 unit212 具有相同的能力。我怎样才能巧妙地为这 300 个独特的单位建模?

我只有两个很烂的想法。要么为每个单元创建一个类,最终得到 300 个类。每次我必须检查时都会有这样的构造:

for (Unit *unit in units)
{
    if ([unit isKindOfClass:[Unit1 class]])
    {
      // do something
    }
    else if ([unit isKindOfClass:[Unit2 class]])
    {
      // do something
    }
    else if ([unit isKindOfClass:[Unitxxx class]])
    {
      // do something
    }
}

另一个解决方案是创建一个具有所有能力的单体怪物单元类。

我想到了一个类似这篇文章中解释的设计:http: //www.learn-cocos2d.com/2010/06/prefer-composition-inheritance/

我已经尝试过进行这种设计,但没有成功。 在此处输入图像描述

我感谢每一个建议。

提前致谢!

4

2 回答 2

1

尝试使用协议。Unit18、Unit33 和 Unit212 都可以符合 TreeInvisibility 协议。

要检查一个单元是否符合协议,请调用[unit conformsToProtocol:@protocol(TreeInvisibility)].

这里的好处是类可以从多个协议继承。这允许您混合和匹配协议的组合。


现在我想多了,除了所有协议之外,您仍然需要使用这种方法编写 300 个类。这只是使控制单元更容易,因为您只需要检查不同的协议而不是单个类。

它可能不是您的最佳解决方案,但希望它能帮助您指明一个好的方向。

于 2012-08-25T13:38:55.883 回答
0

Ray Wenderlich 刚刚发布了一篇关于基于组件的架构的新博文。这正是我一直在寻找的。 http://www.raywenderlich.com/24878/introduction-to-component-based-architecture-in-games

于 2013-01-02T14:17:38.600 回答