私は次のようなゲームエンティティクラスを持っています:
@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 インスタンスを使用している必要がありますか?