创建自定义cocos2d / box2d对象

时间:2011-12-04 12:14:51

标签: cocos2d-iphone box2d

我正在尝试创建一个由多个主体组成的自定义cocos2d和box2d对象,并且需要我对结构的帮助不大。

我希望对象由两个实体和一个精灵组成。这是我创建的头文件:

@interface NewBlock : CCNode {
    CCSprite *sprite;
    b2Body *body1;
    b2Body *body2;
    b2World *world;
}

所以我继承了CCNode,我认为这是正确的做法。这是我的实现方法:

-(id)initWithWorld:(b2World*)theWorld atLocation:(CGPoint)location {
  if (self = [super init]) {

    sprite = [CCSprite spriteWithFile:@"level_2.png"];

    ...box2d stuff...

    [self addChild:sprite];
  }   
return self;
}

在我想要对象的场景中,我会创建它:

NewBlock *block = [[NewBlock alloc] initWithWorld:world atLocation:ccp(100,100)];
[self addChild:block];

我知道我可以从CCSprite继承,但我可能想在某个时候向对象添加更多精灵,所以更一般的例子对我有用。

我尝试了上面代码的示例,并在控制台中获取以下消息:

sharedlibrary apply-load-rules all
Current language:  auto; currently c++

我创建自定义cococs2d / box2d对象的结构是否正确?我错过了什么吗?

1 个答案:

答案 0 :(得分:0)

设计很好。我个人也赞成继承CCNode,原因完全相同:你永远不知道你的CCSprite何时需要包含多个CCSprite。因此,CCNode类成为控制器,CCSprite和其他类被视为View。在这种情况下,b2Body将成为模型。

您的错误与您设计课程的方式无关。代码是否仍然有效,还是崩溃了?也许这是可以忽略的众多信息之一。

添加Box2D代码时通常需要注意。你的所有类都应该使用.mm扩展名,甚至是那些可能没有直接使用Box2D代码的扩展名。