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

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

2
2つの長方形間の衝突方向を決定する方法は?
2つの長方形の間で衝突が発生する方向を判別する方法を理解しようとしています。 1つの長方形は移動しません。もう一方の長方形は、任意の方向の速度を持っています。衝突が発生したときに、移動する長方形の位置をインパクトポイントに設定できるようにしたいと考えています。 どの方向から衝撃が発生するのかわからなくなったようです。厳密に垂直方向または水平方向に移動している場合、優れた検出を実現します。しかし、同時に両方向に移動すると、奇妙なことが起こります。 2つの長方形の間で衝突が発生する方向を決定する最良の方法は何ですか?

1
衝突のために2Dビットマップ(地形に使用)を2Dポリゴンメッシュに変換するにはどうすればよいですか?
だから私は、破壊可能な地形などの通常のすべてのものを備えたワームに似た大砲タイプのゲームを作っています...そして、私に衝突法線やそのようなものを与えないピクセルごとの衝突を使うことができましたが。すべてをメッシュに変換することは、既存の物理ライブラリを使用できることも意味します。これは、自分で作成できるものよりも優れています。 私は、マーチングスクエアを使用してビットマップの輪郭を取得することでこれを行うと人々が言及しているのを見てきましたが、これらをメッシュに変換する方法については何も見つかりません(異なる高さを定義する輪郭線を持つ3Dメッシュを参照する場合を除き、これは私が望むものではありません)。現時点では、次のような基本的なマーチングスクエアの輪郭を取得できます(背景のグリッドのような線がマーチングスクエアの「セル」になります)。 よりスムーズで正確な結果を得るには、補間する必要がありますが、それが一般的な考え方です。これをメッシュに変換する方法についていくつかのアイデアがありましたが、それらの多くは特定の状況で機能しない可能性があり、完全に機能すると考えていたものは非常に遅く、仕上げさえしていませんまだ!理想的には、私が最終的に使用するものはどれも、急速に発射する武器や掘削ツールなどのケースですべてのフレームを実行するのに十分な速さである必要があります。 このようなものをメッシュに変換するための何らかの既存のアルゴリズム/テクニックがあるに違いないと思いますが、何も見つからないようです。Delaunay Triangulationのようなものを見てきましたが、私が知る限りでは、上記の例のように凹型の形状を正しく処理できず、地形内の穴も考慮されません。 比較のために思いついたテクニックを調べて、誰かがより良いアイデアを持っているかどうかを確認すると思います。まず最初に、マーチングスクエアの等高線を補間し、線の端から頂点を作成し、線がセルのエッジと交差する場所の頂点を取得します(重要)。次に、頂点を含む各セルについて、2つの頂点を使用してポリゴンを作成し、セルのコーナーを3番目の頂点(おそらく最も近いコーナー)として作成します。 各セルに対してこれを行うと、元のビットマップを正確に表すメッシュが必要になると思います(ビットマップの端にあるのはポリゴンだけで、その間にある大きな領域は空になります)。これに関する唯一の問題は、最初のマーチングスクエアですべてのピクセルを1回ループし、次にすべてのセル(画像の高さ+ 1 x画像の幅+ 1)を少なくとも2回ループすることです。画像...

1
AABB-AABB衝突、どちらの顔に当たる?
オブジェクトが衝突したときにスライドできるようにするには、次のことを行う必要があります。 彼らが衝突するAABBのどの面を知っています。 その面の法線を計算します。 法線を返し、プレイヤーの速度に適用するインパルスを計算します。 質問 2つのAABBが衝突していることを知りながら、衝突したAABBの面を計算するにはどうすればよいですか?1つはプレーヤーで、もう1つはワールドオブジェクトです。 これは次のようになります(白で囲まれた問題の衝突)。 ご協力ありがとうございました。

1
歩行/衝突用のサイドスクローラー可変地形高度マップ
私はXNAの傾斜したタイルを移動するのをいじっていますが、それは半機能的ですが完全に満足できるものではありません。また、あらかじめ決められた勾配のセットがあると、「有機的」に見える地形が十分に得られない可能性があるとも考えていました。また、スロープごとにいくつかの異なるタイプのタイルを作成する必要があるという問題もあります(私が理解しているように、45度のタイルのみが完全にチェーンされます)。 傾斜したタイルがつながっているエッジのグリッチで問題が発生したため、傾斜したタイルのつながったチェーンをスキャンして新しい大きな三角形として扱うことを考えていました。しかし、これは地形の曲率を制限する問題に戻ります。 したがって、私が今やりたいのは、レベル(またはレベルのセクション)のテレインの単純な画像またはテクスチャを作成し、テレインの単純な高さマップ(各XのYの)を生成することです。プレーヤーのY位置は、X位置に基づいて更新されます。 これを行う簡単な方法(またはこの問題を解決するより良い方法)はありますか?私がこの方法で見ることができる主な問題は、歩くことができる地上の領域がある場合です。多分歩くことができるすべての地上エリアをマッピングする方法はありますか? 私はこの有用なコードを調べてきました:http : //thirdpartyninjas.com/blog/2010/07/28/sloped-platform-collision/ しかし、実際のポイント/ベクトルを生成する方法が必要です。 編集:私は投稿したリンクを使用して傾斜したパスを事前に生成しようとしましたが、今は提案したとおりにピクセルごとの衝突を使用する必要があると確信しています。私はhttp://create.msdn.com/en-US/education/catalog/tutorial/collision_2d_perpixelで例を見ていて、衝突が検出されたときにスプライトを調整する方法を理解しようとしています。デビッドが示唆したように、私はいくつかのセンサーポイント(足、側面、下部中央など)を作成し、これらのポイントが実際に2番目のテクスチャの不透明な部分(単純な傾斜)と衝突するときを簡単に検出できます。衝突に基づいて実際にスプライトの位置を調整する方法のアルゴリズムに問題があります。 スプライトの右足の斜面との衝突を検出したとしましょう。傾斜テクスチャデータをスキャンして、スプライトの足を傾斜の内側に配置しないようにY位置を見つけるにはどうすればよいですか?例で1D配列として格納する方法は少しわかりにくいですが、代わりに2D配列としてデータを格納する必要がありますか? また、衝突チェックを水平方向と垂直方向に分離するのが最善であると何人かの人々が述べていることに気づきました。なぜそれが正確なのですか?

2
弾丸物理学を使用して2つの特定のオブジェクトの衝突コールバックを取得するにはどうすればよいですか?
プロジェクトに衝突コールバックを実装する際に問題が発生しました。2つの特定のオブジェクト間を検出したいのですが。通常の衝突が発生しましたが、別のオブジェクトと衝突したときに、1つのオブジェクトを停止したり、色を変更したりします。私は弾丸ウィキからコードを書きました: int numManifolds = dynamicsWorld->getDispatcher()->getNumManifolds(); for (int i=0;i<numManifolds;i++) { btPersistentManifold* contactManifold = dynamicsWorld->getDispatcher()->getManifoldByIndexInternal(i); btCollisionObject* obA = static_cast<btCollisionObject*>(contactManifold->getBody0()); btCollisionObject* obB = static_cast<btCollisionObject*>(contactManifold->getBody1()); int numContacts = contactManifold->getNumContacts(); for (int j=0;j<numContacts;j++) { btManifoldPoint& pt = contactManifold->getContactPoint(j); if (pt.getDistance()<0.f) { const btVector3& ptA = pt.getPositionWorldOnA(); const btVector3& ptB = pt.getPositionWorldOnB(); const btVector3& normalOnB = …

1
MMO衝突検出
2Dゲーム用のMMOゲームサーバーを構築していて、現在衝突検出を実装しています。どうすればよいか知りたいのですが。 1000人のプレイヤーがプレイしていて、10,000個のオブジェクトがあるとします。それらすべてを繰り返し処理して、衝突しているかどうかを判断する必要がありますか?これは少し高価なようです。 世界をチャンクに分離し、チャンク内の各プレーヤーのすべてのオブジェクトを反復することができます。 他のアイデアや標準とは何か知りたいのですが。MMOサーバーが衝突検出を処理する最良の方法は何static objectsですか?

4
特定のアクションが衝突を引き起こすことがわかっている場合、とにかくそのアクションの発生を許可する必要がありますか?
ゲームエンジンのプログラミングが完了し、テストを行ったので、グラフィックスの問題に気づきました。 大きな問題は、プレーヤーが壁を押し付けようとすると、常に壁のスペースに入ろうとし、衝突検出によって壁を外側に押し戻すため、キャラクターが壁に対して「揺れ動く」ことです。 そのような状況に対処する適切な方法は何ですか? 私の最初の本能は、特定の方向に移動すると衝突が発生する場合、エンティティの位置が変更されるまでその方向の移動を無効にしました。つまり、オブジェクトがプラットフォームに落ちたら、オブジェクトがプラットフォームの上になくなるまで重力を無効にします。 同じオーバーラップスペースにある同じ2つのオブジェクト間の繰り返し衝突検出を解決するより良い方法はありますか?

3
ブレイクアウトのためのより洗練されたボールパドル衝突アルゴリズム?
私が取り組んでいる簡単なブレイクアウトゲームがあります。衝突コードはしっかりしています。物事はあるべきように跳ね返り、物事を通過したり他のファンキーさを行ったりしませんが、反射は少し単純化しています。その結果、ボールがループにスタックしてしまい、ループを壊すことなく最後のブロックを打てない状態になりやすい。 現在、パドル衝突コードはY速度を反映しており、パドルのどちら側に当たるかに応じてX速度を反映しています。 // Check for paddle collisions if ((m_ball.rect()).intersects(m_paddle.rect())) { double ballCenter = m_ball.rect().getX() + (m_ball.rect().getWidth()/2); double paddleCenter = m_paddle.rect().getX() + (m_paddle.rect().getWidth()/2); m_ball.setSpeedY(m_ball.speedY() * -1); if (ballCenter > paddleCenter) { m_ball.setSpeedX(Math.abs(m_ball.speedX())); } else { m_ball.setSpeedX(-Math.abs(m_ball.speedX())); } } アルゴリズムをより「興味深い」ものにして、ボールが同じ四角形でバウンドし続けないようにコントロールを強化する方法はありますか?

2
2Dゲームで非長方形のオブジェクトとの衝突を検出する方法は?
長方形のオブジェクトとの衝突の検出は非常に簡単です。シンプルなタイルベースのゲームを書くことができます。ここで、オブジェクトが長方形ではない可能性がある、たとえば山など、タイルベースではないゲームの作成方法を学びたいと思います。 丘と山のあるでこぼこした地形が必要だとしたら、地形の形状をどのように保存しますか?また、このような不均一なオブジェクトの衝突をどのように検出しますか?

3
画像上に衝突データを描画するためのポリゴンエディター[終了]
休業。この質問には、より焦点を当てる必要があります。現在、回答を受け付けていません。 この質問を改善してみませんか?質問を更新して、この投稿を編集するだけで1つの問題に焦点を当てます。 2年前休業。 ゲーム内の船のテクスチャーの上にポリゴンをプロットするエディターが必要です。 これは次のようになります。 赤が衝突の輪郭で、画像がテクスチャです。 テクスチャ座標のようなポリゴンを保存したいです。例えば、左上が(0、0)で右下が(1、1)です。 これと同じようなことをするツール(無料)はありますか?私はxnaとC#で作業します。

2
2Dのピクセル単位の衝突検出で影響ポイントを見つけるにはどうすればよいですか?
私はプラットフォーマーを作成しており、ピクセルごとの衝突検出を実装しています。しかし、これは私がまだ理解していない2つの障害を引き起こしています。この質問に関する最初の障害は、影響のポイントを効率的に見つける方法がわからないことです(他の問題はおそらくこのStackExchangeの別の質問になるでしょう)。 ピクセルで指定されたレートでキャラクターを転倒またはジャンプさせます。つまり、たとえば、フレームごとに文字が4ピクセル落ちたり、ジャンプしたりする可能性があります。キャラクターが落下してオブジェクトと交差する場合、キャラクターはそのオブジェクトに着地する必要があります(ジャンプしてオブジェクトにヒットする場合は、その逆も同様です)。ただし、たとえば、キャラクターが4ピクセル落ちて、オブジェクトに3ピクセル入ると、落ちるのは止まりますが、適切な場所に配置されません。キャラクターはインパクトの最初のピクセルで止まるように見えるはずです。 では、どうすれば効果的なポイントを効率的に見つけることができますか?私は、輪郭のピクセルを比較し、衝突をテストし、衝突があるまでそれらを1つずつ増減するという漠然とした考えしか持っていませんが、引き離すのは複雑に思えるかもしれません。 プラットフォームについて知りたい場合は、XNA for Windows Phone 7を使用して開発しています。


4
2つの線の交点を見つける方法
キャラクターにバウンディングボックスがあり、前のフレームでの位置と現在のフレームです。境界ボックスは軸に揃えられています。 私のキャラクターは洞窟の中を走り回っています。洞窟の壁を表す点(線)のリストがあります(軸が揃っていません)。 私のキャラクターの一部が洞窟の壁の一部と衝突した可能性が高いときに通知する粗いアルゴリズムを持っています。 壁のどのラインがどの時点で衝突したかを明確に示す細かいアルゴリズムはありません。 私の現在の考えは、前のフレームの位置から現在のフレームの位置までの境界ボックスの各コーナーに線を作成し、これらの各線を洞窟内の線との交差についてテストすることでした。壁。 しかし、私のグーグルフーフは交差を計算するための簡単な公式を私に見せてくれませんでした。これを行うには悪い方法を選びましたか、それとも検索が苦手ですか? 私のゲームはscalaで書かれていますが、どのようなcスタイル言語や多くのスクリプト言語でも、あなたが答えたいと思うものは何でも読んだり翻訳したりできます。

2
タイルベースのマップの衝突検出の問題
私はタイルベースのマリオクローンに取り組んでいます。 これは、ウォーキングや落下の際にすべて正常に機能します。しかし、プレイヤーが壁の近くにジャンプして空中を右に歩くと、プレイヤーは壁に引っかかってしまいます。プレーヤーがキーを離すと、プレーヤーのスプライトは再び落ちます。 セットアップはかなり簡単で、問題を見つけることができません。マップは、マップブロックを持つ2D配列として構築されます。ブロックは固体でもそうでなくてもかまいません。プレーヤーは固体オブジェクトを移動できません。 ゲームループでは: プレーヤーの位置が更新されます(重力、動きなど)。 衝突の地図を確認してください。Yで衝突が検出されると、プレーヤーの位置が更新され、ブロックの上または下(プレーヤーの方向に応じて)になり、その後、衝突ボックスが新しい位置で更新されます。次に、Xの同じプロセス。 コリジョンボックスが新しい場所(空き場所)に更新されます。ボックスが調整され、プレイヤーの下にあるブロックが着地したかどうかを確認するのが少し高くなります。これは、プレイヤーの状態を、スプライトの飛行からアイドル状態に変更するためです。 また、XとYのチェックを入れ替えて、プレーヤーがX線上を移動するようにしました。その後、プレイヤーが移動すると、動きが非常に遅くなります。ボタンを押して離して移動すると、プレイヤーはより速く移動しますが、チャックの中にいます。とても奇抜です。 誰かがエラーを見たり、これのためのより良い衝突アルゴリズムを私に与えることができますか? 更新(コードを更新していません) xとyのチェック方法を入れ替えて、isonland変数を実装しました。したがって、壁に向かって歩いたりジャンプしたりするときは、完璧に機能します。今だけ、プレイヤーがジャンプすると、マリオは着地したときに戻ってきます。これは、Xチェックメソッドが最初に実行され、マリオの位置を調整するためです。 どうすれば解決できますか? マップクラス更新メソッド: public void update(int timeElapsed) { //update entities for(Entity entity : _mapEntities) { entity.update(timeElapsed); } //update objects for(MapObject mapObt : _mapObjects) { mapObt.update(timeElapsed); } //check for collisions checkMapCollision(); } エンティティ(抽象)更新メソッド: public void update(int timeElapsed) { _velocity = new …

1
GetData()を使用しないXNA 2D衝突検出
私は現在、地形の変形を伴うワームゲームに取り組んでいます。以前はを使用し.GetData()てカラー配列を変更してからを使用していましたが、.SetData()代わりに(RenderTargetsを使用して)GPUで作業を行うように変更を検討しました。 すべて順調ですが、別の問題に直面しています。地形に対する衝突全体の検出は、地形を表すカラー配列に基づいていましたが、そのカラー配列はもうありません。.GetData()テレインを変更してColor配列を更新するたびに使用できますが、それでは最初の変更の目的が損なわれます。 私が大丈夫だと思うのは.GetData()、最初に一度使用し、その後、他の方法で地形に加えた変更に基づいてその配列を変更することです。私はこれをどのように行うのかわかりませんが、誰でも手助けできますか?

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