タグ付けされた質問 「collision-resolution」

衝突後にゲームオブジェクトの位置を調整するプロセス。

1
定常に近い物理オブジェクト間のジッターを防ぐにはどうすればよいですか?
私はカスタムの物理エンジンを実装しており、思い通りに機能するようになっています。重力、衝突、衝突応答があります。残念ながら、ほとんど静止しているオブジェクトの間にジッターがあるようですが、ほとんどの場合、変更できない低物理ティックが原因です。 私はオンラインで調べて、自分の試みのいくつかを含め、見つけた実装のいくつかを試しました。これが私が試した解決策です: 速度/運動量/ポテンシャルエネルギーがしきい値を下回るときの動きの減衰。 速度/運動量/ポテンシャルエネルギーがしきい値を超えている場合にのみ重力を適用します。 スリープ機能の実装。これは、最後の60フレームのオブジェクトの位置をチェックし、しきい値の境界ボックスの外に移動していない場合はスリープします。 衝突テストと解決を適用するときに、オブジェクトを上から下に反復します。 これが私のコードです: for each (auto ball in m_Balls) { ball->Update(t); ball->Accelerate(m_Gravity); } // This disgusting hack sorts the balls by height. In a more complete physics // implementation, I guess I could change the sorting based on the direction of // gravitational force. This hack …

2
マルチプレイヤーレースゲームでのプレイヤー間の衝突
私は、p2.js、フェイザー、node.jsを使用して、シンプルなレーシングゲーム(宇宙船、無重力)を作成しています。 私がしたこと:クライアントはサーバーから世界の状態を受け取ります: サーバーからの最新の速度/位置に基づいて他のプレイヤーを推定する クライアント側の予測が正しいかどうかを確認します-サーバーからの適用位置がなく、サーバーが認識していなかった入力を処理します。 固定物理ステップ サーバ: クライアントから入力を受け取り、適用する 固定物理ステップ 各クライアントに世界の状態を送信します 現在、プレイヤー同士の衝突に苦労しています。衝突しているプレイヤーは、衝突中に常にジャンプしています。クライアント側の予測がサーバーと同様の結果を計算していないためだと思います。 サーバーはプレーヤーからのすべての入力を認識していません(ラグ)。 プレーヤーとサーバーが衝突しているプレーヤーの位置が異なります(ラグ)。 この2つを組み合わせると、クライアントはサーバーとは異なる衝突を解決し、世界の状態が到着したときにプレーヤーは大きな修正を行う必要があります。

2
2D AABBと複数の衝突の解決
わかりました、これは私がかなり長い間理解しようとしてきた問題です。Mineは2Dプラットフォーマーゲームで、ワールドは(通常)不動のタイルとモバイルスプライトで構成され、どちらもAABBを使用してヒットボックスを表します。このゲームは、タイルのレイヤーの移動に伴う複雑さのため、グリッドベースではありません。 衝突を検出し、衝突の深さを簡単に把握できます。「最短軸メソッド」を使用して、スプライトとタイルの間の衝突を解決する方法を決定します。スプライトが垂直よりも水平に深い場合、解決する方向は上または下になります。スプライトが水平よりも垂直に深い場合、解決する方向は左または右です。 これは非常に単純で、かなりうまくいきます。つまり、スプライトが複数のタイルと衝突するまでです。その性質上、各衝突は個別にチェックする必要があるため、衝突が異なると解決する方向も異なる場合があります。たとえば、スプライトがタイルの行を横切って移動しようとしている場合、1つのフレームで次のタイルと交差します。水平深度が垂直深度よりも短いこと。衝突が「左に解決」と言っているので、それは押し戻され、コーナーにスタックします。 私はかなり長い間この問題を何度も何度も検討してきましたが、いくつかの解決策が思い付きましたが、すべてに欠陥があります。特定の側面を到達不能としてマークすることもできますが、グリッドベースのエンジンがないと、「到達不能」の判定は非常に複雑で、特にタイルのレイヤーの移動は常に可能です。 別の可能な方法は、衝突が発生する前に衝突を予測し、衝突のポイントまで移動を「ワークバック」することですが、私はその数学がどのように機能するのかわかりません。 特に80年代のゲームはすでにこの問題を解決しているので、私には信じられないほど明白なものが欠けているように感じます。

3
再利用可能なトップダウン衝突クラス
私は最近、モノゲームを始めて、簡単なトップダウンゲームに取り組んでいます。 マウスを追跡するための動きと回転を整理しましたが、衝突に悩まされています。 私が知りたいのは、基本的に次の2つです。 衝突を処理する最良の方法は何でしょうか?Rectangle.Intersects(Rectangle1, Rectangle2)重なり合う四角形が返されることはわかっていますが、上から下への移動はx / y軸上にあるため、衝突が発生している場所を知りたいので、プレーヤーが取得しないような「壁のスライド」を作成できます壁で立ち往生。 プレーヤーのx / y座標をソリッドオブジェクトの座標と照合して確認し、ソリッドオブジェクトの境界に入る場合は、プレーヤーを以前の位置にスローしますか?あなたは何を提案しますか? すべてのソリッドやnpcなどに衝突を適用する最良の方法は何でしょうか?私は現在gameObject、すべてのオブジェクトが継承するクラスを作成し、そこで衝突を処理することを考えています。 読んでくれてありがとう、誰かが私にいくつかのヒントをくれることを願っています。

2
「Advanced Character Physics」に基づく物理エンジンで摩擦を実装する方法
Thomas Jakobsenによる古典的なテキストAdvanced Character Physicsの概念に基づいて、物理エンジンを実装しました。摩擦については記事でごく簡単に説明しているだけで、Jakobsen自身は「これよりも優れた摩擦モデルを実装できるはずである」と述べています。 一般的に、前述の記事の概念に加えて、信頼できる摩擦モデルをどのように実装できますか?そして、どのようにして見つけられた摩擦を円の回転に変換できますか? この質問を私の具体的な実装についてではなく、より一般的にはヤコブセンスのアイデアを優れた摩擦システムと組み合わせる方法について質問したくありません。しかし、これは摩擦をまったく処理しない私のエンジンの現在の状態を示すライブデモです。。http //jsfiddle.net/Z7ECB/embedded/result/ 以下は、この論文に基づいたエンジンで衝突検出がどのように機能するかを示した例です。Verlet統合では、現在と以前の位置が常に保存されます。これらに基づいて、新しい位置が計算されます。すべてのフレームで、円と線の間の距離を計算します。この距離が円の半径よりも小さい場合、衝突が発生しており、円はオーバーラップのサイズ(図のオフセット)に従って問題の線から垂直に投影されます。 速度はVerlet統合により暗黙的であるため、位置を変更すると速度も変更されます。私が知る必要があるのは、円の摩擦の量を何らかの方法で決定し、速度を下げるために円と平行に後方に移動することです。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.