2011-10-24 7 views
3
私は誰もがあなたがBOX2D世界ではそうのような重力を追加することを言って見

Box2D特定のオブジェクトへの重力?

b2Vec2 gravity = b2Vec2(0.0f, -10.0f); 
bool doSleep = false; 
world = new b2World(gravity, doSleep); 

事はしかしある、私が唯一のCCSpriteからのuserDataが含まれている特定のb2Bodyに比重をしたい場合は? AFAIKこれは私が望んでいない世界のすべてに重力を適用するので、特定のb2Bodyだけにこの重力をどのように適用できるのか誰かが私に説明することができますか?

ありがとうございます!

EDIT1: 私はちょうど、代わりに世界の

_bottomBody->ApplyForce(gravity, _bottomBody->GetPosition()); 

=新しいb2World ...など、この行を行うことができます...それだけでb2Body上の重力とその仕事ではないでしょうか?

答えて

4

フレームごとに特定のb2Bodyに力/衝動を加えるだけです。重力をエミュレートします。

// a procedure called every frame 
void Application::on_update_world(double t) 
{ 
    m_body_with_custom_gravity->applyForce(CUSTOM_GRAVITY * m_body_with_custom_gravity->getMass()); 

    m_phys_world->Step(t, VEL_ITERATIONS, POS_ITERATIONS); 
} 

密接にあなたに関連した質問でスレッド:どのように How to apply constant force on a Box2D body?

+0

?私はちょうど上記の方法を使用するだろう、上記の1つのオブジェクトに適用する私のコードを変更する方法はありますか? –

+1

あなたのアプリケーションに間違いなくフレームループ、つまりb2World :: step()を呼び出すプロシージャ/メソッドがあります。この手順の中で、指定された本文に対してapplyForceメソッドを呼び出す必要があります。この回答のコード例を参照してください。 –

+0

アプリケーションにフレームループがありません。私のアプリは、Obj Cと混在したCocos2dとBox2d Mixedです。私はちょうどビューが更新されたときにすべての秒を呼び出すCocos2Dゲームループを使用します。そのコードが私の役に立つのであれば、元の投稿のEdit 1をチェックしてください。 –

関連する問題