私はあなたが空気で吹き飛ばすボールを持っています。送風機に近いと多く飛ばし、遠ければ飛ばしにくくしたい。私は box2d を使用しており、インパルス関数を使用しています。"body->ApplyLinearImpulse(force, body->GetPosition())". これを達成するための公式や方法が見つからないようです。ボールを合計 300 ピクセルの距離まで飛ばしたい場合、どうすればこれを達成できますか? 助けてください。
3 に答える
シミュレーションの前に距離を計算したい場合は、box2d ソースを確認する必要があります。ボディの速度をシミュレートする場合、重力、追加の適用力、線形ダンピング、角度ダンピング、および場合によってはそれ以上に応じて修正されます。また、速度は速度の反復に依存します。
しかし、本当にスムーズなモーション (一撃など) が必要な場合は、インパルスの代わりに applyForce 関数を使用することをお勧めします。ただし、各シミュレーション ステップで力を適用していることを確認してください。
編集:
また、空気抵抗を Fa = -k*V*V としてシミュレートすることもできます。このようにパイプ内の動きをシミュレートしました。うまくいきました。
したがって、各ステップは次のようになります。
BlowForce = k1 / distance; // k1 - coefficient
Resistance = -k2 * V * V; //k2 - another coefficient
TotalForce = BlowForce + Resistance;
body->ApplyForce(TotalForce);
私はボックス 2D の専門家ではありませんが、実際には目に見えない小さなボックスを作成し、ボールをボックスに当てます...送風機がより多く吹いている場合は、反対方向にボックスの速度を上げます。300 ピクセルの長さに関する限り、ボールが移動するように力と速度を調整する必要があります。
300/<your_rendering_window_to_physics_world_ratio>
物理的な世界で。
力 = 質量 * 加速度なので、体に設定した質量を取り、必要な加速度を計算し (300px を PTM_RATIO で割ることを忘れないでください)、2 つを掛け合わせます。