Box2D物理エンジンを使用して、線路上の列車のトップビューをどのように維持しますか?
-
03-07-2019 - |
質問
Box2Dのような物理ライブラリを使用して、線路をたどったり、スイッチを通過したりする列車の上面図をモデル化するのは楽しいと思います。この機能を動作させるには、どのジョイントとモーターが必要ですか?
車をスプライントラックに追従させるために必要な力を実装して、他の電車、歩行者、デロリアンなどにぶつかるようにする方法に興味があります。「車は今spline(t)」 ;タイムステップごとに、物理エンジンに過剰な力が発生します。私が正しく理解している場合、1つの力で車をトラックに貼り付け、その角度を別の力でトラックと平行になるように拘束する(または2つの力で車の前面と背面をトラックに固定する)必要があります列車を前進させる別の力。これらのことを達成する方法についての詳細を探しています。
解決
「本物」がなければ簡単だと思います。ルクソールやタンブルバグなどのゲームのボールの動きのような物理学。意味:列車がトラックによって定義されたスプラインに従うようにします。
フィジックスを使用すると、おそらく列車を線路に追従させるのが過剰になり、ぎくしゃくした動き、列車の脱線、列車のジャンクションでの動揺など、あらゆる種類の望ましくない副作用につながる可能性があります
ただし、物理ジョイントを使用して個々のワゴンを結合することもできます。機関車だけが加速力を得るようにしてください。列車の残りの部分は、追従するか押されてもスプラインにとどまるようにしてください。
他のヒント
「トラック上」に保存するのが心配なのはなぜですか?どこへ行くの?重力はそれを維持し、オブジェクトの交差はそれを維持する必要があるため、心配する必要がある唯一の方向は前方と後方です。それがモーターの出番です。これで完了です。残りは装飾です。
問題の編集への応答:
サイデイル。また、列車を幅に比べて十分に長く/硬くして、交差点をナビゲートできるようにします(交差点の問題を最小限に抑えるために、列車を直角に近づけます。
トップダウンビュー(空から電車を見る)は、2D物理エンジンを実際に必要としません-私があなたを正しく理解していれば。実際、それは実際には問題の助けにはならないようです(電車のシミュレーションが必要な場合)が、多分あなたはそれをただ楽しんで試してみたい。 :)
ただし、電車や車にはスライダージョイントを、機関車にはモーターを配置します。スライダージョイントには特別な実装が必要になる場合があります。直線のセグメントではなく、スプラインに沿って電車を走らせたいと思いますか?
いくつかの種類のボールジョイントが車をつなぎます。
実装はそれほど難しくなく、基本的な仕事をするものを数時間でプロトタイプ化することができました。スムーズに実行するには多くの作業が必要になりますが、基本的には「サイドレール」だけです
トップダウンの場合、明らかに最初にBox2Dで重力をオフにする必要があります。第二に、列車を構築します。列車の車輪を車の車輪のように扱うと、突然もっと簡単になります。トラックにはいくつかの選択肢があります:
-
(box2Dの世界ではなく)独自のゲームオブジェクトを作成します。これは、列車が「従う」単純な線です。 (列車の車輪のモーターを使用して、ラインに向かって「操縦」できます)。次に、幅の広い「レール」で線を重ねます。グラフィックスとあなたはうまく偽造システムを持っています。車輪が線から離れすぎて外れると、車輪がオフになるように指示します。脱線します。
-
実際の物理的なレールを作成する-列車が「車輪」とする外側のレール(サイドレールなど)ぶつかります。この例では緩やかな曲線が必要になりますが、リソースが限られているため非常に難しい場合があります(Box2Dのボックスからの素敵な低速曲線のシミュレーションは、プロセッサ上で大雑把です)
その後、列車を放します!