2013-05-30 3 views
0

Я создал метод в классе Sprite, который обновляет положение тела CCPhysicsSprite до достижения определенной позиции. Код ниже:EXC_BAD_ACCESS при уничтожении тела

-(void)updatePhyscisSprite { 

if (phySpr.b2Body->GetPosition().y < 200.0/PTM_RATIO) { 

    b2Vec2 force = b2Vec2(0.0, 12.0*phySpr.b2Body->GetMass()); 
    phySpr.b2Body->ApplyForce(force, phySpr.b2Body->GetWorldCenter()); 
    } 
if (phySpr.b2Body->GetPosition().y > 200.0/PTM_RATIO) { 
    bWorld->DestroyBody(phySpr.b2Body); 
    phySpr.b2Body = NULL; 
    [bLayer removeChild:phySpr]; 

} 
} 

Я получаю сообщение об ошибке EXC_BAD_ACCESS на линии:

if (phySpr.b2Body != NULL) { // EXC_BAD_ACCESS ERROR 

У меня есть ощущение, что проверка для недействительности, когда тело создает проблему NULL, так как метод вызывается каждый 1/60 секунды. Я не совсем уверен, как это сделать.

+0

phySpr является причиной аварии, попробуйте niling в phySpr после RemoveChild – LearnCocos2D

+0

Дайте контекст для 'if (phySpr.b2Body! = NULL)'. – Kreiri

+0

@ LearnCocos2D: Он работает. большое спасибо. Я был у него часами. – user2380370

ответ

0

попытаться сделать это:

в PhyscisSprite.mm

- (void)dealloc 
{ 
    bWorld->DestroyBody(b2Body); 
    b2Body = NULL; 

    [super dealloc]; 
} 

и в функции просто введите

[bLayer removeChild:phySpr cleanup:YES]; 
Смежные вопросы