0

我正在尝试找出支持实体组件模式的objective-c 框架。我查看了 Cocos2d、Kobold2d、KoboldTouch.. 但它们似乎都与此无关。如果objective-c有任何可用的框架,任何人都可以指导我吗?

4

1 回答 1

1

您可以手动将实体组件模式添加到 cocos2d/etc,尽管它没有直接内置到 API 中。

  1. 在实体中使用-addChild:(et al) 添加组件。
  2. 在组件中使用-parent以访问其实体。
  3. 在组件中使用-update:以更新其实体。

SomeCCNodeEntity.m

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

移动组件.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: Prefer Composition over Inheritance上有所介绍

至于不同实体之间的消息传递系统,您还必须自己推出。Apple 的 API 使用委托、通知和观察者的想法来告诉其他对象。只有一个对象可以成为委托,为另一个对象执行可选或必需的任务。多个对象可以注册通知,或成为观察者。

这会很快变得复杂,特别是如果你有 10 个对象注册为观察者,并且它们接收观察消息的顺序很重要。他们是否应该根据注册的顺序(例如 FIFO 或 LIFO)来获取消息?更复杂的东西?ETC...

于 2013-02-16T20:19:23.293 回答