我有一个游戏实体类如下:
@interface CPlanet : NSObject {
b2Body *planetBody;
}
-(void)init;
-(void)syncWithPhysics;
@end
在init()方法中我创建了一个b2Body实例,并将CPlanet实例分配给其userdata,如下所示:
//creating the physics
b2BodyDef bodyDef;
bodyDef.type=b2_dynamicBody;
bodyDef.userData=self;
planetBody=world->CreateBody(&bodyDef);
在我的CCLayer实例中,我尝试按如下方式检索此对象:
for(b2Body* b =world->GetBodyList();b;b=b->GetNext())
{
void *udata=b->GetUserData();
if(udata!=NULL)
{
CCLOG(@"Some udata %d",udata);
CPlanet *planet=(CPlanet*)udata;
// [planet syncWithPhysics]; <---- here programm crashes ???
}
}
但是“[planet syncWithPhysics]”行使应用程序崩溃
编程接收信号:“EXC_BAD_ACCESS”。
我检查了检索到的CPlanet实例(udate)的内存地址是同一个对象。
任何提示? 这是否必须将Box2D作为C ++而我使用Objective-C实例?
答案 0 :(得分:1)
在您取消引用指针时已解除分配行星对象。你必须保留这个对象!
您可以将行星设为CCNode对象,并将其作为子项添加到图层中。然后它将被图层保留。