2011-07-02 21 views
0

私は2体、重力のある世界、ステップ付きのダニ法を設定しました。すべての体はちょうど良い動きをしており、重力も作用しています。ボディーは衝突しません

しかし、衝突はありません。 body1が地面に当たったとき、彼はちょうど画面から出て、それを打つことはなく、本当のボールのように飛びます。 ボディ1がボディ2にぶつかると、何も起こりませんでした。

ボディには形状があり、世界にはエッジがありますが、衝突はありません。 ここには何が欠けていますか?ここ

は私が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

形状の1つがセンサの場合、衝突反応はありません。 – iforce2d

+0

うわー!どうもありがとう ! – Curnelious

+0

ええ、連絡先リスナーは引き続き連絡先を検出できます。 –

答えて

0

特定の問題は、この行です:あなたはセンサーとして固定具を設定すると、BOX2Dで

spriteShapeDef.isSensor = true; 

、それは他の備品と衝突しません。