Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xcode 物体不会碰撞_Xcode_Cocos2d Iphone_Box2d - Fatal编程技术网

Xcode 物体不会碰撞

Xcode 物体不会碰撞,xcode,cocos2d-iphone,box2d,Xcode,Cocos2d Iphone,Box2d,我已经设置了两个物体,一个有重力的世界,一个有步长的勾选法,所有的物体都移动得很好,我可以对它们施加力,重力也起作用 但没有碰撞。 当body1落地时,他只是走出屏幕,并没有击中它,而是像一个真正的球一样跳跃。 当body1击中body2时,继续移动,因为什么也没有发生 物体有形状,世界有边缘,但没有碰撞。 我错过了什么 以下是我从init调用的一些函数: - (void)addBoxBodyForSprite:(CCSprite *)sprite { b2BodyDef sprite

我已经设置了两个物体,一个有重力的世界,一个有步长的勾选法,所有的物体都移动得很好,我可以对它们施加力,重力也起作用

但没有碰撞。 当body1落地时,他只是走出屏幕,并没有击中它,而是像一个真正的球一样跳跃。 当body1击中body2时,继续移动,因为什么也没有发生

物体有形状,世界有边缘,但没有碰撞。 我错过了什么

以下是我从init调用的一些函数:

- (void)addBoxBodyForSprite:(CCSprite *)sprite {

    b2BodyDef spriteBodyDef;
    spriteBodyDef.type = b2_dynamicBody;
    spriteBodyDef.position.Set(sprite.position.x/PTM_RATIO,sprite.position.y/PTM_RATIO);
    spriteBodyDef.userData = sprite;
    spriteBody = world->CreateBody(&spriteBodyDef);

    b2PolygonShape spriteShape;
    spriteShape.SetAsBox(sprite.contentSize.width/PTM_RATIO/2,sprite.contentSize.height/PTM_RATIO/2);
    b2FixtureDef spriteShapeDef;
    spriteShapeDef.shape = &spriteShape;
    spriteShapeDef.density = 10.0;
    spriteShapeDef.isSensor = true;
    spriteBody->CreateFixture(&spriteShapeDef);

}


-(void)worldEdge
{
    CGSize winSize = [CCDirector sharedDirector].winSize;
    b2BodyDef groundBodyDef;
    groundBodyDef.position.Set(0,0);
    b2Body *groundBody = world->CreateBody(&groundBodyDef);
    b2PolygonShape groundBox;
    b2FixtureDef boxShapeDef;
    boxShapeDef.shape = &groundBox;
    groundBox.SetAsEdge(b2Vec2(0,0), b2Vec2(winSize.width/PTM_RATIO, 0));
    groundBody->CreateFixture(&boxShapeDef);
    groundBox.SetAsEdge(b2Vec2(0,0), b2Vec2(0, winSize.height/PTM_RATIO));
    groundBody->CreateFixture(&boxShapeDef);
    groundBox.SetAsEdge(b2Vec2(0, winSize.height/PTM_RATIO), b2Vec2(winSize.width/PTM_RATIO, winSize.height/PTM_RATIO));
    groundBody->CreateFixture(&boxShapeDef);
    groundBox.SetAsEdge(b2Vec2(winSize.width/PTM_RATIO, winSize.height/PTM_RATIO), b2Vec2(winSize.width/PTM_RATIO, 0));
    groundBody->CreateFixture(&boxShapeDef);
}




-(void)tick:(ccTime) dt
{


    world->Step(dt,10,10);
    for(b2Body *b=world->GetBodyList(); b; b=b->GetNext()) 
    {
        if(b->GetUserData() !=NULL )
           {
               CCSprite *sprite=(CCSprite *) b->GetUserData();//every b of the world will be update his position
               sprite.position=ccp( b->GetPosition().x * PTM_RATIO, b->GetPosition().y * PTM_RATIO  ) ;
               sprite.rotation=-1*CC_RADIANS_TO_DEGREES(b->GetAngle());
           }

    }

一切正常,但从未发生碰撞。

具体问题是这条线:

spriteShapeDef.isSensor = true;

在box2d中,当您将夹具设置为传感器时,它不会与其他夹具发生碰撞。

如果其中一个形状是传感器,则不会发生碰撞反应。是的,但您的联系人侦听器仍然可以检测到联系人。