Сохранение подкласса NSObject в Box2d UserData и получение его обратно? - PullRequest
0 голосов
/ 24 июля 2011

У меня есть класс игрового объекта:

@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?

1 Ответ

1 голос
/ 24 июля 2011

Объект планеты был освобожден во время разыменования указателя.Вам придется сохранить объект!

Вы можете сделать планету объектом CCNode и добавить его в качестве дочернего к слою.Тогда он будет сохранен слоем.

...