2013-03-09 8 views
13

私は体の質量が10であり、プログラムの各サイクルは単純なアプローチで100の力を適用します。Box2Dボディベロシティキャップ?

Vector2 force = new Vector2(0, 1) * 100; 
bod.ApplyForce(force, bod.GetWorldCenter()); 

それは、素晴らしい作品加速し、そのすべてが、それは(私は仮定10分の100)10の速度に到達したら、それはどんなより速く行くことはありません。私は物理学者ではありませんが、体は重力のように絶え間なく加速しなければならないことを思い出しています。この速度制限は、Box2Dが何かを行う方法の結果であるのでしょうか?また、私はそれを修正するために何をしますか?

注:私は(b2Settings.h中)BOX2Dによって課される全体的な最大速度制限をよく承知しています:私はApplyLinearImpulse代わりのApplyForce

Updateを使用している場合が、私は同じ制限された速度を取得します。私の例では、問題のアイテムは、1000または10000が常に(力/質量)の最大速度に近づくかどうかにかかわらず、適用された力を変更するときにこの限界をかなり下回っています。

+0

これは適切な回答ではありませんが、全体の規模を小さくする必要があります。このように、あなたはより小さな力を適用することができますし、いくつかの力の限界によって立ち往生することはありません。 Box2dは、あなたが大きすぎる規模で作業していると、しばしば好きではありません。 – phemios

+0

スケールは問題ありません。オブジェクトは10kgの質量を持ち、100Nsの力を加えています。上限速度は10m/sであり、これはBox2Dのスケール範囲の途中です。 –

+1

線形減衰をチェックしましたか? – Davos555

答えて

3

オブジェクトの最大許容速度に達しています。これを修正するには、2つの方法があります。

  1. Box2Dの設定で許容される最大速度を調整します。設定を開き、MaxTranslationのfloat/constをより高い値に変更してください。デフォルト値は2.0であると仮定しています。

  2. オブジェクトサイズをスケールダウンし、必要な計算を実行してオブジェクトをスケールアップします。これはMaxTranslationノートのBOX2Dのコメントとして、それを行うための技術的に正しい方法である:

体の最大線速度。この制限は非常に大きく、数値的な問題を防ぐために使用されます。これを調整する必要はありません。

#1を試してください。それがうまくいけば、スケーリングの必要性が高いと言えます。希望が役立ちます。

+0

この回答はポップアップし続け、間違っています。全体の質問、特に「更新」に記載されている部分をお読みください –

+0

**速度は10m/sですか?または、実際には時間ステップごとに距離が10メートルに達していますか? Box2Dは時間ステップごとの距離の動きを報告しています。したがって、60Hzと仮定すると、 'MaxTranslation'のデフォルト値は' 2 'です。タイムステップ当たりの「0」単位は、実際には120m/sの速度で移動している。 私は失礼を言いたいわけではありませんが、私はあなたがその2つを混乱させるかもしれないと思います。 –

+0

はい、私は肯定的です。私はあなたが何を記述しているのか非常に認識しています。私が限界に当たっていたら、私は(より大きな力で)説明しているように、私はそれを増やすことができないでしょう。 –