2Dロープ衝突検出


13

次のyoutubeビデオのように、オブジェクトと衝突できるロープを作成したいです。

2Dゲーム物理ロープ

ポイントを使用し、これらのポイントを線で接続するverlet統合を実装すると考えています。ビデオで効果を得るために、ロープにどのタイプの衝突検出を適用するかを考えています。

私はあなたが各ポイントにいくつかのCDを実行する必要があると思います。box2Dを使用したいので、各ポイントをリジッドボディにしたいと思いますか?アドバイスをいただければ幸いです。


1
リンクでビデオを注意深く見ると、シミュレートされている「ロープ」が実際にはチェーン、つまり、連続的に柔軟なプリミティブではなく、線で接続された多数の柔軟性のないセグメントであることは明らかです。これは、ロープが小さな丸い障害物に巻き付くときに最も顕著です。角が回転するのを見ることができます。チェーンは、連続したロープよりもはるかに簡単にシミュレートできます。各リンクは単なる衝突プリミティブであり、互いに永続的に接続されています。より説得力のある動作を実現するには、各リンクを完全に柔軟性のあるものではなく、非常に硬いバネにします。
ポールZ

回答:


6

Box2Dを使用しているため、一連の長方形を作成し、Box2Dのジョイントを使用してそれらを結合できます。ロープがあります。

曲がったロープから角が突き出ないようにするために、2つのオプションを想像できます。

  1. ロープのセグメントに丸みを帯びた端を付けます(これにより、それらはもはや長方形ではなくなります)
  2. このロープ自体を非表示にし、物理学にのみ使用します。各フレームのジョイントの位置を取得し、それを使用して、プレイヤーが目にするロープをその場で描画します。

警告:自分でこれを試したことはありませんが、投稿したビデオが実質的に同じものを偽装して表示したときに、一連の結合された長方形がどのように失敗するかを確認できません。

編集:PaulZを見ただけで、同じことがわかりました。質問に対する彼のコメントも読んでください。


2

ここで簡単なGoogleがこれを投げ。Box2Dを使用して単純なロープを実装するデモ、説明、およびコード(Flash)。ロープはそれ自体とシーンの上部のブロックと衝突します。


0

これが私がすることです。線上の各点を円にし、円が重なるように十分な点を作ります。各ポイントを隣接するテザーは、標準の衝突ではなく、このテザーがポイントを互いに一定の距離に保つようにします。

Box2Dについては知りませんが、必要な機能はそこにあると思います。


0

当初、Box2Dには、ポイントツーポイントの制約が結合された薄いボックスで作られたロープブリッジデモがありました。始めるのに最適な場所です(まだデモに同梱されているかどうかはわかりませんが、再作成するのは簡単です)。

剛体シミュレーターとは独立して、距離制約のある粒子としてロープを実装するのは簡単です(言及したように、この記事で説明されているようなVerlet統合および制約解決スキームを使用:http : //www.gamasutra.com/resource_guide/ 20030121 / jacobson_pfv.htm)、ただし、剛体がロープに反応するようにしたい場合(ビデオのように、ぶら下がりボックスがある場合)、はるかに複雑になります。Box2Dのような包括的なツールスイートから始めて、パーティクルから構築しようとするのではなく、逆方向に作業します。


0

このAllegroのゲーム:SpeedHack 2002のCupidを覚えています。これには、風景と衝突するロープの実装が含まれています。ソースコードの heart_tails.cppファイルのPhysParticlesクラスとHeartTrailsクラスを参照してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.