EXC_BAD_ACCESS cocos2d - box2d
问题描述:
我正在抛出一个对象(box2d),但是当我尝试进行碰撞检测时,它给了我该对象的CGRect上的错误。见下图EXC_BAD_ACCESS cocos2d - box2d
,这就是我如何创建对象的身体
-(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.01秒计划一次。并且我在触摸结束时使freebody = nil,所以无论何时,当我的计时器方法运行时,它都会给我这个错误。
答
也许你正在失去freeBodySprite
内存引用。
尝试将其创建为retain
属性,并且始终在代码中使用self.freeBodySprite
。
@property (nonatomic, retain) CCSprite *freeBodySprite;
...
self.freeBodySprite = [CCSprite spriteWithFile:@"object.png"];
...
self.freeBodySprite.position.x;
在exc_bad_access被引发的那一行代码之前,你确定'freeBodySprite'不是'nil'吗? –
没有。有时它可以工作,有时不工作。 – Zohaib