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

衝突検出とは、ゲームプレイ中に2つ以上のエンティティが互いに接触するかどうかを決定することです。

4
ポイントが回転した長方形の内側にあるかどうかを効率的に確認するにはどうすればよいですか?
最適化のための部分、学習目的のための部分、私は敢えて質問します:C#またはC ++を使用して、2DポイントPが2D回転長方形の中にあるかどうかを最も効率的に確認するにはどうすればよいXYZWですか? 現在、私がやっていることは、本の「リアルタイム衝突検出」にある「ポイントイントライアングル」アルゴリズムを使用して、それを2回実行しています(長方形を構成する2つの三角形、たとえばXYZとXZW)。 bool PointInTriangle(Vector2 A, Vector2 B, Vector2 C, Vector2 P) { // Compute vectors Vector2 v0 = C - A; Vector2 v1 = B - A; Vector2 v2 = P - A; // Compute dot products float dot00 = Vector2.Dot(v0, v0); float dot01 = Vector2.Dot(v0, v1); float dot02 …

2
外挿は衝突検出を中断します
スプライトの動きに外挿を適用する前は、衝突は完全に機能していました。ただし、(物事を滑らかにするために)スプライトの動きに外挿を適用すると、衝突が機能しなくなります。 これが、外挿前の動作です。 しかし、外挿を実装した後、衝突ルーチンが壊れます。これは、(レンダーコールにある)外挿ルーチンによって生成された新しい座標に作用しているためと考えています。 外挿を適用した後 この動作を修正するには? 外挿の直後に追加の衝突チェックを試みました-これは多くの問題を解決するようですが、レンダリングにロジックを入れることは問題外なので、これを除外しました。 私はまた、spritesXの位置のコピーを作成し、それを外挿して、オリジナルではなくそれを使用して描画してみたので、元のロジックをそのままにして、ロジックがピックアップできるようにしました。壁にぶつかったとき。これもこれに対処する正しい方法ではないと確信しています。 ここで似たような質問をいくつか見つけましたが、答えは役に立ちませんでした。 これは私の外挿コードです: public void onDrawFrame(GL10 gl) { //Set/Re-set loop back to 0 to start counting again loops=0; while(System.currentTimeMillis() > nextGameTick && loops < maxFrameskip){ SceneManager.getInstance().getCurrentScene().updateLogic(); nextGameTick+=skipTicks; timeCorrection += (1000d/ticksPerSecond) % 1; nextGameTick+=timeCorrection; timeCorrection %=1; loops++; tics++; } extrapolation = (float)(System.currentTimeMillis() + skipTicks - …

2
落下ブロックと複雑な形状
私は現在、テトリスのような単純なゲームを持っていて、解決できない問題に遭遇しました。 テトリスとは異なりがある場合、単一の落下形状は、I落下する必要のある複数の、潜在的に連動形状を有しています。最終的な位置を計算する必要があります。以下を検討してください。 緑の形状の最終的な位置を計算するには、別の正方形またはボードの端に当たるまで、すべての正方形をスキャンします。できた 複数の単純な形状の場合は、ボードを上に向かって作業します。したがって、赤は移動する必要がないことがわかり、オレンジは1つ下がり、緑は3つ下がります。できた 連動する緑と赤の形の扱い方がわかりません。#2のロジックを使用すると、空中で「スタック」してしまいます。緑の形状を下にスキャンすると、赤に遭遇して移動しません。赤の場合も同様です。解決策は、2つの形状を1つとして扱うことです。 #3と同様に、このシナリオでは、オブジェクトを1つとして扱うことで成功させることもできます。 #3や#4とは異なり、オレンジのシェイプは1スクエアの高さに浮き上がるため、シェイプを1つとして扱うことができませんでした... 問題#6の別のバリエーション。 ますます複雑なシナリオで織り交ぜる多くの図形がある他のシナリオも考えられますが、上記で問題の最も基本的な部分がカバーされていると思います。 私がまだ出会っていない/考えていないエレガントな解決策があるように感じます。洞察、アイデア、またはリソースに非常に感謝します。 解決 私が思いついた解決策は確かにエレガントです、以下の@ user35958の答えに基づいて、次の再帰関数(疑似コード)を作成しました function stop(square1, square2){ // Skip if we're already stopped if(square1.stopped){ return; } // Are we comparing squares? if(!square2){ // We are NOT comparing squares, simply stop. square1.stopped = true; } else { // Stop IF // square1 …

3
狭位相衝突検出アルゴリズム
衝突検出には3つのフェーズがあります。 Broadphase:相互に作用する可能性のあるすべてのオブジェクト間でループします。ループを高速化する場合は、誤検知が許可されます。 Narrowphase:それらが衝突するかどうか、場合によっては、どのようにして誤検知がないかを決定します 解決策:衝突を解決します。 私が尋ねている質問はナローフェーズについてです。複雑さと精度が異なる複数のアルゴリズムがあります。 ヒットボックスの交差:これは事後アルゴリズムであり、複雑度は最低ですが、あまり正確ではありません。 色の交差:各ピクセルのヒットボックスの交差、事後、ピクセル完全、時間に関して正確ではない、複雑度が高い Separating axis theorem:これはより頻繁に使用され、三角形には正確ですが、エッジを見つけることができないため、事後的に、最後のフレームを考慮すると、より安定します 線形レイキャスティング:先見的アルゴリズムは、半現実的に見える物理学に役立ち、交差点を見つけます。SATよりも正確ですが、より複雑です。 スプライン補間:演繹的で、線形光線よりもさらに正確で、より複雑です。 私が忘れていたものはおそらくもっとたくさんあります。問題は、いつSATを使用した方がよいか、いつ光線を使用するか、いつスプラインを使用するか、そして何か良いものがあるかどうかです。

2
2DタイルベースのRTSで橋の下を通過するボート
2DタイルベースのRTSを書いています。そして私はそれに「疑似3D」機能を追加したいと思います-川に架かる橋。 私はまだコーディングを開始していません。衝突検出モデルにどのように適合するかを考えようとしています。橋の下を通過するボートと橋の上を移動するユニットは、最終的にマップ上の同じセルを占有します。それらを衝突から予防する方法は? そのような問題を解決するための一般的なアプローチはありますか?または、これを行うには3Dワールドを実装する必要がありますか?

4
衝突長方形の応答
移動可能な長方形を複数の長方形と衝突させるのに問題があります。 私はSFMLを使用していて、intersects2つの四角形を取り、その交差部分を返すという便利な関数があります。移動可能な四角形を衝突させたい四角形でいっぱいのベクトルがあります。私は次のコードを使用してこれをループしています(pは移動可能な四角形です)。 IsCollidingWithブール値を返しますがintersects、交点を計算するためにSFMLも使用します。 while(unsigned i = 0; i!= testRects.size(); i++){ if(p.IsCollidingWith(testRects[i]){ p.Collide(testRects[i]); } } そして実際のCollide()コード: void gameObj::collide( gameObj collidingObject ){ printf("%f %f\n", this->colliderResult.width, this->colliderResult.height); if (this->colliderResult.width < this->colliderResult.height) { // collided on X if (this->getCollider().left < collidingObject.getCollider().left ) { this->move( -this->colliderResult.width , 0); }else { this->move( this->colliderResult.width, 0 ); } …

2
ブレイクアウト衝突:衝突の側面の検出
私はブレイクアウトクローン(私の最初のゲーム)を書いていて、レンガのどちら側がヒットしたかを理解する方法について完全に行き詰まっています。 私はこのような衝突検出方法を持っています: DetectCollision(Object a, Object b) x = distance(a.x, b.x); y = distance(a.y, b.y); if (x is smaller than the combined width & y is smaller is than combined height { return true; } return false; これはまったく問題なく動作しますが、適切に応答するためには、衝突の側面と、中心からの相対的な位置を知る必要があります。 私は過去数日間を振り回して過ごしましたが、道に迷っています。

2
連続物理エンジンの衝突検出技術
私は純粋に連続的な物理エンジンに取り組んでおり、幅広い位相衝突検出のためのアルゴリズムを選択する必要があります。「完全な連続」とは、交差テストを決して行わず、代わりにすべての衝突が発生する前にそれをキャッチし、TOIによって順序付けられた「計画された衝突」スタックに入れる方法を見つけたいという意味です。 ブロードフェーズ 私が考えることができる唯一の連続的なブロードフェーズの方法は、各ボディを円に入れ、各円が別の円と重なるかどうかをテストすることです。ただし、これは恐ろしく非効率的で、カリングが欠如しています。 四分木など、今日の離散衝突カリング手法にどのような連続アナログが存在するのかもわかりません。ディスクリートエンジンなどの不適切で無意味な広範なテストを防ぐにはどうすればよいですか?また、1フレーム以上先の衝突を確認できるようにしたいと考えています。 ナローフェーズ 私はナローSATを離散ではなく継続的なチェックに適応させることができましたが、皆さんが出くわした可能性のある論文やサイトには、他にも優れたアルゴリズムがあるはずです。 どのようなさまざまな高速または正確なアルゴリズムを使用することをお勧めしますか、それぞれの長所/短所は何ですか? 最後の注記:凹面、凸面、円形、または穴があってもよいさまざまなポリゴンをどのように保存するかまだ決まっていないため、アルゴリズムではなくテクニック を言います。アルゴリズムに必要なものに基づいてこれを決定する予定です(たとえば、ポリゴンを三角形または凸型の形状に分解するアルゴリズムを選択した場合、このフォームにポリゴンデータを格納するだけです)。

1
変形面
私はレベルサーフェスの変形する物理的な動作を達成しようとしていますが、これまでの実装から始める方法がわかりません。 表面の形状(平面、立方体、球…)に関係なく、ゲームエンティティ(プレーヤー、敵、オブジェクト…)の位置に小さなインデントを設定したいと思います。 説明するのはちょっと複雑なので、私が話していることを説明しました。球の例を次に示します。 したがって、表面は少し変形する必要があります(本当に柔らかいベッドやソファーのように見えるようにするため)。私のサーフェスでは、スムーズな変形を実現するためにおそらく高い頂点数が必要ですが、私の大きな問題は、この変形を計算するための数学です。 私はOpenGLを使用してC / C ++でプログラミングしていますが、正しい方向のアドバイスは問題ありません。

2
Warcraft 3のようなゲームで障害物をパスファインディング
タイルベースのマップでのA *検索を検討してください。単純明快なコードは次のようになります。そのセル内にユニットがある場合、そのユニットに到達できなくても問題ありません。 しかし、マップの解像度の問題があります。Warcraft 3を見ると、モンスターと構造には異なる半径があり、非常に近くを歩くことができます。これは、ベクターベースに似ていますが、これはどのように実装されましたか? また、Warcraft 3のように、移動障害物衝突検出を経路探索アルゴリズムに組み込むための標準ソリューションは何ですか?

1
ポリゴンを任意の形状に合わせるためのよく知られたアルゴリズムはありますか?
Chipmunk物理エンジンを使用して、2D Cゲームのレベルを作成しています。ポリゴンを任意の形状にフィットさせて、衝突マスクとして機能させたいです。次のような任意のレベルのオブジェクトの白黒の衝突マスクがあるとします。 これを取得するためのよく知られたアルゴリズムはありますか? 次に、赤いポリゴンを使用して、画像に合わせて物理オブジェクトを作成します。

4
ミサイルとビットマップ地形の交点を見つける最も効率的な方法は何ですか?
2Dビットマップ地形の傾斜を見つけることに関する私の以前の質問に続いて、ミサイルが命中した2D地形上の点を見つける最良の方法を知る必要があります。明らかに、ミサイルの下のピクセルが地形と交差するかどうかはわかりますが、地形のかなり奥に移動したと言えます。 最初に衝突した場所を見つけるために後退する最良の方法は何ですか?一度にXピクセル前にミサイルの前の位置に移動できますが、Xの適切な値はどれですか。そしてもっと賢い方法はありますか?たぶん半分の距離を移動し、次にクォーターなどを移動しますか?

4
Cocos2Dでは、ユーザーが描画した任意の形状との衝突をチェックするにはどうすればよいですか?
スプライトとユーザーが生成したある種の形状との衝突を検出したいのですが。 例えば。画面には3つのオブジェクトがあります。ユーザーは指を取り、2つのオブジェクトの周りに異常な形状を描きます。これら2つのオブジェクトを検出する必要があります。 Cocos2Dを使用してこれに効率的にアプローチするにはどうすればよいですか?

3
2つの方向付けられたバウンディングボックス(OBB)間の最速3D衝突検出
ゲームの中で、衝突システムを追加する必要があるところです。私はjBulletを試しましたが、うまくいきましたが、私が探していたものではありませんでした。2つの方向性のあるバウンディングボックス(OBB)ツリーが衝突しているかどうかをテストする簡単な方法が欲しいだけです。 木を使って衝突をするつもりでした。ブロードフェーズ用のAABBを作成し、それがテストに合格した場合、ツリー内の各OBBが他のツリーと衝突するかどうかを確認します。 インターネットでいくつか見つけましたが、完全には理解できませんでした。私が求めているのは、3D OBBの衝突を適切に説明するWebサイトまたはリソースですか? GJKはSATよりも高速であることを学びました。また、ボックスが互いにどこまで浸透しているかを知ることができるようです。私はいくつかのGJKのものを見つけましたが、それらは箱ではありませんでした。代わりに、より複雑で混乱を招くものです。 3つのベクトル(各軸の中心、サイズ、回転)からOBBを作成できるようにしたいだけです。次に、それらとの衝突をテストすることができます。投稿していただきありがとうございます。

5
グリッド内のどのセルが特定の三角形と交差するかを判断するにはどうすればよいですか?
現在2D AIシミュレーションを作成していますが、エージェントの位置が別の視野内にあるかどうかを確認する方法が完全にわかりません。 現在、私の世界のパーティション分割は、単純なセル空間パーティション分割(グリッド)です。三角形を使用して視野を表現したいのですが、三角形と交差するセルを計算するにはどうすればよいですか? この写真のように: 赤い領域は、三角形がそれらのセルと交差するかどうかをチェックすることによって計算したいセルです。 前もって感謝します。 編集: 混乱を増すためだけに(あるいはおそらくそれをさらに簡単にするために)。各セルには最小ベクトルと最大ベクトルがあり、最小は左下隅、最大は右上隅です。

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