释放mousejoint时获取精灵位置时出现EXC_BAD_ACCESS错误

时间:2012-08-08 14:48:13

标签: cocos2d-iphone box2d exc-bad-access box2d-iphone

我试图在移动精灵的鼠标点被释放时获得精灵的确切位置(即使精灵可能仍在移动)并显示它。我正在使用Cocos2d和Box2d。下面是代码ccTouchesEnded方法。

ccTouchesEnded:

- (void)ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{

if (mouseJoint)
{
    b2Fixture *fixture;
    CCSprite *mySprite = (CCSprite *) fixture->GetUserData();
    NSInteger attachedSprite = mySprite.tag;
    if (attachedSprite == 1) {
        CGPoint spritePosition = mySprite.position;

        CCLOG(@"the sprite position is x:%0.2f, y:%0.2f", spritePosition.x, spritePosition.y);
        }
    world->DestroyJoint(mouseJoint);
    mouseJoint = NULL;
}
}

我一直收到指向该行的EXC_BAD_ACCESS错误:

CCSprite *mySprite = (CCSprite *) fixture->GetUserData();

我不确定是什么问题。请帮忙。

1 个答案:

答案 0 :(得分:1)

由于夹具尚未初始化,您收到该错误,请查看此信息 tutorial,他如何遍历所有世界元素

for(b2Body *b = _world->GetBodyList(); b; b=b->GetNext()) {
    if (b->GetUserData() != NULL) {
        CCSprite *curSprite = (CCSprite *)b->GetUserData();
...
    }
}

在执行GetUserData()

之前,您必须为夹具指定一些东西