2011-07-02 47 views
0

我已经设置了2个机构,一个有重力的世界,一个带有台阶的刻度方法,所有的物体都移动得很好,我可以对它们施加力,重力也在起作用。机体不会碰撞

但没有碰撞。 当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()); 
      } 

    } 

一切都还好吧移动,但没有碰撞过。

+1

如果其中一个形状是传感器,则不会有碰撞反应。 – iforce2d

+0

哇!非常感谢 ! – Curnelious

+0

是的,但您的联系人侦听器仍然可以检测联系人。 –

回答

0

的具体问题是这样的线:

spriteShapeDef.isSensor = true; 

在Box2D中,当设置一个夹具作为传感器,它不会与其他固定装置碰撞。