0

300種類のユニットがあると想像してください。各ユニットには異なる特殊能力があります。たとえば、unit18は木の近くにあると見えなくなります。Unit33とunit212は同じ能力を持っています。これらの300のユニークなユニットを巧妙な方法でモデル化するにはどうすればよいですか?

私には2つのアイデアしかありません。ユニットごとに1つのクラスを作成し、最終的に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
    }
}

もう1つの解決策は、すべての能力を持つモノリスモンスターユニットクラスを作成することです。

私はこの投稿で説明されているようなデザインを考えました:http: //www.learn-cocos2d.com/2010/06/prefer-composition-inheritance/

私はすでにこの種のデザインを作ろうとしましたが、うまくいきませんでした。 ここに画像の説明を入力してください

私はすべての提案に感謝します。

前もって感謝します!

4

2 に答える 2

1

Protocolsを使用してみてください。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 に答える