首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当我试图进行碰撞检测时,接收到EXC_BAD_ACCESS信号

当我试图进行碰撞检测时,接收到EXC_BAD_ACCESS信号
EN

Stack Overflow用户
提问于 2013-05-06 07:28:24
回答 1查看 139关注 0票数 1

我坚持这个立场,不知道这是怎么回事,

我在我的项目中启用了ARC。我做的softBody如下

Ball.h

代码语言:javascript
复制
    B2Body *body[NUM_SEGMENT];
    CCSprite *ball;

Ball.mm

代码语言:javascript
复制
    ball = [CCSprite spriteWithFile:@"Ball1.2.png"];
    ball.tag = 1;


    for(int i=0;i<NUM_SEGMENT;i++){
        float theta = deltaAngle*i;
        float x = radius * cosf(theta);
        float y = radius * sinf(theta);
        b2Vec2 circlePosition = b2Vec2(x/PTM_RATIO,y/PTM_RATIO);
        b2BodyDef bodyDef;
        bodyDef.type = b2_dynamicBody;
        bodyDef.position = (center + circlePosition);
        bodyDef.userData = &ball;
        body[i] = world->CreateBody(&bodyDef);
        outerBodyFixture[i]=body[i]->CreateFixture(&fixtureDef);
        [bodies addObject:[NSValue valueWithPointer:body[i]]];
    }

我给这些瓷砖做了如下的物理,

Tile.h

代码语言:javascript
复制
CCSprite *tile;

Tile.mm

代码语言:javascript
复制
tile = [layer1 tileAt:ccp(i, j)];
tile.tag = 0;
b2BodyDef tileDef;
tileDef.type = b2_staticBody;
tileDef.position.Set((tile.position.x+(tile.contentSize.width/2))/(PTM_RATIO), (tile.position.y + (tile.contentSize.height/2))/PTM_RATIO);
tileDef.userData = &tile;
tileBody = world->CreateBody(&tileDef);

现在我试图捕捉碰撞检测,我已经编写了代码,它将打印碰撞物体的标记号。代码如下,

代码语言:javascript
复制
std::vector<MyContact>::iterator pos;
    for (pos=_contactListener->_contacts.begin();
         pos != _contactListener->_contacts.end(); ++pos) {
        MyContact contact = *pos;

        b2Body *bodyA = contact.fixtureA->GetBody();
        b2Body *bodyB = contact.fixtureB->GetBody();
        if (bodyA->GetUserData() != NULL && bodyB->GetUserData() != NULL) {

此时出现错误: EXC_BAD_ACCESS

代码语言:javascript
复制
        CCSprite *spriteA = (__bridge CCSprite *) bodyA->GetUserData();

此时出现错误: EXC_BAD_ACCESS

代码语言:javascript
复制
        CCSprite *spriteB = (__bridge CCSprite *) bodyB->GetUserData();


            printf("contact :%d \n",spriteB.tag);
        }
    }

不知道这段代码有什么问题,给我一些解决方案

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-06 08:47:19

您的问题是在userData中存储指向指针的指针,而不是指针本身。

tile已经指向CCSprite实例,&tile指向指向CCSprite实例的指针,从而使您的转换不正确。

因此,将其更改为:

代码语言:javascript
复制
tileDef.userData = tile;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16394063

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档