Cocos2d iphone 创建自定义cocos2d/box2d对象

Cocos2d iphone 创建自定义cocos2d/box2d对象,cocos2d-iphone,box2d,Cocos2d Iphone,Box2d,我正在尝试创建一个由多个实体组成的自定义cocos2d和box2d对象,在结构方面需要一些帮助 我希望对象由两个实体和一个精灵组成。这是我创建的头文件: @interface NewBlock : CCNode { CCSprite *sprite; b2Body *body1; b2Body *body2; b2World *world; } 所以我从CCNode继承,我认为这是正确的做法。以下是我的实现方法: -(id)initWithWorld:(b2Wo

我正在尝试创建一个由多个实体组成的自定义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继承,但我可能希望在某个时候向对象添加更多的sprite,这样一个更通用的示例对我来说会很有用

我已使用上述代码尝试了一个示例,并在控制台中收到以下消息:

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

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

设计很好。我个人也喜欢子类化CCNode,原因完全相同:你永远不知道什么时候你的CCSprite需要包含多个CCSprite。因此,CCNode类成为控制器,CCSprite和其他类被视为视图。b2Body将是本例中的模型

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


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

这是我的Box2D代码的一个错误:我认为您应该得到分数,因为确认正确的设计通常有助于识别错误。创建这样的类允许一些强大的设计选项!