2010-12-06 18 views
2

現在、Box2D物理エンジンを私のゲームで使用しています。すべてのボディが1つの任意のポイントに引き寄せられるような重力の井戸を作成できるかどうかは疑問でした。これを行うための特定の方法はありますか、または私は各体にカスタムの力をかける必要がありますか? (私は静的な超体を作ろうとしましたが、Box2Dはニュートンのユニバーサルグラビテーションの法則を身体ごとに適用していません)Box2D(C++)Gravity Wells

また、重力をよくする方法はありますか?私は、任意の点を中心に密度の高い球を作り、これを達成するために浮力を使用できますか?

答えて

4

この機能は、残念なことにBox2Dに組み込まれていません。最も簡単なことは、重力井戸と剛体との間の角度と距離を取得し、それに応じて車体速度を設定することです。

は角度を取得するには:

double dx = rigidBodyX - gravityWellX; 
double dy = rigidBodyY - gravityWellY; 
double angle = atan2(dy, dx); 
// angle is in radians, use atan2(dy, dx)/PI * 180 if 
// you need degrees 

は距離を取得するには:私はフラッシュと呼ばれるQuickBox2D私が書いたライブラリを使用して簡単な例を手早く

double dx = rigidBodyX - gravityWellX; 
double dy = rigidBodyY - gravityWellY; 
double dist = sqrt(dx * dx + dy * dy); 

。構文がC++ Box2Dライブラリと大きく異なるが、基本的なプリンシパルは同じなので、それほど役に立ちません。それは完璧な例ではありませんが、あなたが始めるかもしれません。

See The Flash Example

+0

私はあなたのフラッシュ版でいじっと サンプルプログラムdir.x = currVel.x +(強度* Math.cos(ANG))/(DIST * DIST)にライン49 + 50に変更しました。dir.y = currVel.y +(強度* Math.sin(ang))/(dist * dist); このコードの前にこれを追加してください。 var dist:Number = dist(big、little); – conradev

+0

強度を上げる必要がありますが、これらの変更は逆平方法を適用します。 – conradev

+0

あなたの右..距離に基づいて強度を増やす必要があります。私は助けになることができてうれしいです。 – Zevan