我正在尝试创建一个由多个主体组成的自定义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对象的结构是否正确?我错过了什么吗?
答案 0 :(得分:0)
设计很好。我个人也赞成继承CCNode,原因完全相同:你永远不知道你的CCSprite何时需要包含多个CCSprite。因此,CCNode类成为控制器,CCSprite和其他类被视为View。在这种情况下,b2Body将成为模型。
您的错误与您设计课程的方式无关。代码是否仍然有效,还是崩溃了?也许这是可以忽略的众多信息之一。
添加Box2D代码时通常需要注意。你的所有类都应该使用.mm扩展名,甚至是那些可能没有直接使用Box2D代码的扩展名。