2012-02-05 6 views
0

私はこの非常に奇妙な問題をBox2D(iOSの下で)に持っています。私は画面の下部に座っている体を持っています。私がb2_dynamicBodyからb2_staticBodyにbody->SetType(b2_staticBody)を使ってボディをセットした後、後でそれをb2_dynamicBodyに戻すように設定した場合、画面の一番下に落ちてから床と正しく安静に来る。Box2Dの形状が世界に広がる

この現象は、画面の下部にのみ表示されるようです。お互いに座っている他の身体と同じことをすることは、この行動をもたらさない。

次のように(すでに世界の空間に調整されてscreenRectを)私は画面の端を定義しています:

b2BodyDef groundBodyDef; 
groundBodyDef.position.Set(0,0); 
b2Body* groundBody = globalWorld->CreateBody(&groundBodyDef); 
b2PolygonShape groundBox; 
b2FixtureDef boxShapeDef; 
boxShapeDef.shape = &groundBox; 
groundBox.SetAsEdge(b2Vec2(screenRect.p1.x,screenRect.p1.y), b2Vec2(screenRect.p2.x,  screenRect.p1.y)); 
groundBody->CreateFixture(&boxShapeDef); 
groundBox.SetAsEdge(b2Vec2(screenRect.p1.x,screenRect.p1.y), b2Vec2(screenRect.p1.x, screenRect.p2.y)); 
groundBody->CreateFixture(&boxShapeDef); 
groundBox.SetAsEdge(b2Vec2(screenRect.p1.x,screenRect.p2.y), b2Vec2(screenRect.p2.x, screenRect.p2.y)); 
groundBody->CreateFixture(&boxShapeDef); 
groundBox.SetAsEdge(b2Vec2(screenRect.p2.x,screenRect.p2.y), b2Vec2(screenRect.p2.x,  screenRect.p1.y)); 
groundBody->CreateFixture(&boxShapeDef); 

本の奇妙一部は、より多くの私は遠く、ダイナミックからスタティックに身体を切り替えています遠くに押し戻される前に床に落ちる。

私は身体の中で、動的から静的なものを除いて他のものを変更していません。私がボディを動かしてフロアに戻すと、ダイナミックからスタティックへの切り替えが始まり、フロアにどれくらい落ちるかがリセットされますが、スイッチを押すたびにボディが再構築されます。

私は間違って作成していない限り、なぜこのような床の中に落ちているのか分かりません。ゲームの他のすべては完全に機能します。

答えて

0

この問題もありました。ここに私の理論はあります:オブジェクトが静的であるとき、それは地面のような他の静的なものとの接触の生成を​​停止します。だから、再び動的に設定すると、この接触チェックを更新できないようです。

解決方法:オブジェクトの位置を変更するとこれらの連絡先が正しく更新されるため、オブジェクトを現在の場所に移動するだけです。残念ながら、それはゼロ変化として検出されます。だから私は別の場所に移動してから元の位置に移動する必要があります。

b2Vec2 pos = body.getPosition(); 
float ang = body.getAngle(); 
b2Vec2 off_map(-100,-100); 
body.setPositionAndAngle(off_map, 0); 
body.setPositionAndAngle(pos, ang); 

オフマップエリアがない場合は、最初の移動中にオブジェクトを無効にすることができます。

関連する問題