2013-05-30 5 views
0

J'ai créé une méthode dans la classe Sprite qui met à jour la position d'un corps CCPhysicsSprite jusqu'à ce qu'il atteigne une certaine position. Code ci-dessous:EXC_BAD_ACCESS lors de la destruction du corps

-(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]; 

} 
} 

Je continue à obtenir une erreur de EXC_BAD_ACCESS à la ligne:

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

J'ai le sentiment que le contrôle de nullité lorsque le corps est NULL crée le problème car la méthode est appelée à chaque 1/60 de seconde Je ne suis pas vraiment sûr de savoir comment régler cela.

+0

le phySpr est à l'origine du crash, essayez niling le phySpr après removeChild – LearnCocos2D

+0

Donnez un contexte pour 'if (phySpr.b2Body! = NULL)'. – Kreiri

+0

@ LearnCocos2D: Cela fonctionne. Merci beaucoup. Je suis là depuis des heures. – user2380370

Répondre

0

essayer de le faire:

dans PhyscisSprite.mm

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

    [super dealloc]; 
} 

et dans votre fonction il suffit de taper

[bLayer removeChild:phySpr cleanup:YES]; 
Questions connexes