0

我有一个游戏实体类如下:

@interface CPlanet : NSObject {
    b2Body *planetBody;
}

-(void)init;
-(void)syncWithPhysics;

@end

在 init() 方法中,我创建了一个 b2Body 实例并将 CPlanet 实例分配给它的用户数据,如下所示:

//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 实例有关?

4

1 回答 1

1

在您取消引用指针时,行星对象已被释放。您必须保留该对象!

您可以使行星成为 CCNode 对象并将其作为子对象添加到图层中。然后它将被图层保留。

于 2011-07-24T17:28:18.027 回答