2013-06-13 64 views
0

我正在拋出一個對象(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

我有一個計時器,每0.01秒計劃一次。並且我在觸摸結束時使freebody = nil,所以無論何時,當我的計時器方法運行時,它都會給我這個錯誤。

0

也許你正在失去freeBodySprite內存引用。

嘗試將其創建爲retain屬性,並且始終在代碼中使用self.freeBodySprite

@property (nonatomic, retain) CCSprite *freeBodySprite; 

... 

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

... 

self.freeBodySprite.position.x;