EXC_BAD_ACCESS cocos2d - box2d

问题描述:

我正在抛出一个对象(box2d),但是当我尝试进行碰撞检测时,它给了我该对象的CGRect上的错误。见下图EXC_BAD_ACCESS cocos2d - box2d

enter image description here

,这就是我如何创建对象的身体

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

} 
+0

在exc_bad_access被引发的那一行代码之前,你确定'freeBodySprite'不是'nil'吗? –

+0

没有。有时它可以工作,有时不工作。 – Zohaib

我有一个计时器,每0.01秒计划一次。并且我在触摸结束时使freebody = nil,所以无论何时,当我的计时器方法运行时,它都会给我这个错误。

也许你正在失去freeBodySprite内存引用。

尝试将其创建为retain属性,并且始终在代码中使用self.freeBodySprite

@property (nonatomic, retain) CCSprite *freeBodySprite; 

... 

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

... 

self.freeBodySprite.position.x;