0
votes

I am throwing an object (box2d) but its giving me error on CGRect of that object when i am trying for collision detection. see below image

enter image description here

and this is how i am creating object body

-(void) createObject
{
    freeBodySprite = [CCSprite spriteWithFile:@"object.png"];
    //freeBodySprite.position = ccp(100, 300);
    [self addChild:freeBodySprite z:2 tag:6];

    CGPoint startPos = CGPointMake(150, 320/1.25);

    bodyDef.type = b2_staticBody;
    bodyDef.position = [self toMeters:startPos];
    bodyDef.userData = freeBodySprite;


    float radiusInMeters = ((freeBodySprite.contentSize.width * freeBodySprite.scale/PTM_RATIO) * 0.5f);
    shape.m_radius = radiusInMeters;


    fixtureDef.shape = &shape;
    fixtureDef.density = 0.02f;
    fixtureDef.friction = 1.0f;
    fixtureDef.restitution = 0.0f;

    circularObstacleBody = world->CreateBody(&bodyDef);
    stoneFixture = circularObstacleBody->CreateFixture(&fixtureDef);
    freeBody = circularObstacleBody;

}
2
Just before that very line of code where the exc_bad_access is thrown, are you sure that freeBodySprite is not nil?Hermann Klecker
no. sometime it works and sometime its not.Zohaib

2 Answers

0
votes

Probably you are loosing freeBodySprite memory reference.

Try to create it as a retain property, and always use self.freeBodySprite in your code.

@property (nonatomic, retain) CCSprite *freeBodySprite;

...

self.freeBodySprite = [CCSprite spriteWithFile:@"object.png"];

... 

self.freeBodySprite.position.x;
0
votes

I had a timer which was scheduled every 0.01 sec. and i was making freebody = nil on touch end so whenever it was nil and my timer method was running it was giving me this error.