0

エンティティコンポーネントパターンをサポートするObjective-cのフレームワークを見つけようとしています。Cocos2d、Kobold2d、KoboldTouchについて調べましたが、どれもそれに関連していないようです。Objective-cに利用できるフレームワークがあれば、誰か教えてくれませんか?

4

1 に答える 1

1

エンティティコンポーネントパターンは、APIに直接組み込まれていませんが、手動でcocos2d/etcに追加できます。

  1. -addChild:コンポーネントを追加するには、エンティティで(et al)を使用します。
  2. コンポーネントで使用-parentして、そのエンティティにアクセスします。
  3. コンポーネントで使用-update:して、そのエンティティを更新します。

SomeCCNodeEntity.m

- (id)init {
    if (self = [super init])
    {
        [self addChild:[MoveComponent node]];
    }
    return self;
}

MoveComponent.m

CGPoint velocity;

- (id)init {
    if (self = [super init])
    {
        velocity = CGPointMake(0, -50);
        [self scheduleUpdate];
    }
    return self;
}

- (void)update:(ccTime)delta {
    [[self parent] setPosition:ccpAdd([[self parent] position], ccpMult(velocity, delta))];
}

上記のコードは、コンポーネントの-update:メソッドが呼び出されるたびにエンティティを移動します。これはLearn-Cocos2dで少しカバーされています:継承よりも構成を優先する

異なるエンティティ間のメッセージングシステムについては、独自のシステムを作成する必要があります。AppleのAPIは、デリゲート、通知、オブザーバーのアイデアを使用して、他のオブジェクトに情報を伝えてきました。別のオブジェクトに対してオプションまたは必須のタスクを実行するために、1つのオブジェクトのみをデリゲートにすることができます。複数のオブジェクトが通知に登録したり、オブザーバーになることができます。

これは、特に、オブザーバーとして登録されているオブジェクトが10個あり、それらがオブザーバーメッセージを受信する順序が重要である場合は、すぐに複雑になる可能性があります。FIFOやLIFOなど、登録した順序に基づいてメッセージを受け取る必要がありますか?もっと複雑なことはありますか?等...

于 2013-02-16T20:19:23.293 に答える