0

私はあなたが空気で吹き飛ばすボールを持っています。送風機に近いと多く飛ばし、遠ければ飛ばしにくくしたい。私は box2d を使用しており、インパルス関数を使用しています。"body->ApplyLinearImpulse(force, body->GetPosition())". これを達成するための公式や方法が見つからないようです。ボールを合計 300 ピクセルの距離まで飛ばしたい場合、どうすればこれを達成できますか? 助けてください。

4

3 に答える 3

1

シミュレーションの前に距離を計算したい場合は、box2d ソースを確認する必要があります。ボディの速度をシミュレートする場合、重力、追加の適用力、線​​形ダンピング、角度ダンピング、および場合によってはそれ以上に応じて修正されます。また、速度は速度の反復に依存します。

しかし、本当にスムーズなモーション (一撃など) が必要な場合は、インパルスの代わりに applyForce 関数を使用することをお勧めします。ただし、各シミュレーション ステップで力を適用していることを確認してください。

編集:

また、空気抵抗を Fa = -k*V*V としてシミュレートすることもできます。このようにパイプ内の動きをシミュレートしました。うまくいきました。

したがって、各ステップは次のようになります。

BlowForce = k1 / distance; // k1 - coefficient
Resistance = -k2 * V * V; //k2 - another coefficient
TotalForce = BlowForce + Resistance;
body->ApplyForce(TotalForce);
于 2011-09-21T18:41:49.510 に答える
0

私はボックス 2D の専門家ではありませんが、実際には目に見えない小さなボックスを作成し、ボールをボックスに当てます...送風機がより多く吹いている場合は、反対方向にボックスの速度を上げます。300 ピクセルの長さに関する限り、ボールが移動するように力と速度を調整する必要があります。

300/<your_rendering_window_to_physics_world_ratio>

物理的な世界で。

于 2011-09-21T03:16:08.350 に答える
-1

力 = 質量 * 加速度なので、体に設定した質量を取り、必要な加速度を計算し (300px を PTM_RATIO で割ることを忘れないでください)、2 つを掛け合わせます。

于 2011-09-21T21:39:21.540 に答える