我正在尝试找出支持实体组件模式的objective-c 框架。我查看了 Cocos2d、Kobold2d、KoboldTouch.. 但它们似乎都与此无关。如果objective-c有任何可用的框架,任何人都可以指导我吗?
问问题
282 次
1 回答
1
您可以手动将实体组件模式添加到 cocos2d/etc,尽管它没有直接内置到 API 中。
- 在实体中使用
-addChild:
(et al) 添加组件。 - 在组件中使用
-parent
以访问其实体。 - 在组件中使用
-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 回答