問題タブ [aabb]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 複数のキーを押すと AABB の衝突検出に不具合が発生する
現在、私は 2D プラットフォーマーを設計しており、コードが次のような衝突検出を実装しています。
等...
等...
等...
すべてうまく機能しているように見えますが、水平方向のオブジェクトと衝突する場合、右キーを押したまま上キーを押すと、関数はオブジェクトがまだ衝突していることを認識し、オブジェクトが中にある場合に適用されるのと同じ力を適用します-ゲームがジャンプして上に衝突したため、ゲーム内オブジェクトは上向きの力がなくても押し下げられます。
X と Y の衝突に個別のブール値を実装しようとしましたが、これは結果に影響しませんでした。
私が見つけた唯一の修正は、キーを処理するときに if の代わりに else if を使用することです。ただし、これは非常に直線的な動きになり、オブジェクトは斜めに動くことができません。
助言がありますか?
language-agnostic - 衝突検出 - 順序付け - どの衝突が最初に発生しますか?
そこで、長方形 (軸に沿ったバウンディング ボックス) のみを形状として使用する物理エンジンを作成しています。衝突時間と 2 つの移動 aabbs の法線を返すクリスタ エリクソンの本からメソッドを実装しました。また、2 つの aabbs 速度、位置、および衝突に応答して aabbs に新しい速度を与える法線を取得する別のメソッドも作成しました。
現在の実際の問題は、すべての aabb 間の衝突をチェックし、それらに応答するループがどのように見えるかがわからないことです。単純に、衝突時までに衝突を順序付ける方法と、どの衝突に応答する必要があるかがわかりません。
すべての衝突を順序付ける方法を示す疑似コードで記述されたループは、非常に役立ちます。
私が言及したもう 1 つのことは、速度が非常に速い場合、移動するボックスが 1 つのフレームで 2 つの静的なボックスの間を何百回も跳ね返る可能性があるということです。
collision-detection - AABB と AABB の衝突の検出と対応
C++ で、小さなボクセル ゲームに小さな衝突検出と応答システムを実装しました。今のところ AABB とボクセルのみです (ボクセルは立方体なので、これも AABB です)。
実際には、プレーヤー (AABB) がボクセルのエッジに対して正確に 45 度で移動している場合、プレーヤーが少し内外にすばやくグリッチしているという 1 つの特別な例外を除いて、すべて正常に機能します。下の画像でそれを見ることができます。
今、私はこの問題の原因が何であるか疑問に思っていますが、論理エラーを見つけることができません!? だからここで私は現在擬似コードでそれを行う方法:
編集:
スクリーンショットの Y 軸ではなく、Z 軸。私の間違い。
c# - マウスがコントロール内にあるかどうかのチェックからの予期しない出力
winForm ボタンを使用してカスタム ドラッグ アンド ドロップ インターフェイスを実装していますが、マウスの位置を取得してコントロール バウンドに対してチェックする方法についていくつかのソリューションを表示した後、それを機能させることができませんでした。
私が試してみました:
と
これらは両方とも機能しませんでした。マウスの境界を確認するのは簡単な操作のように思えますが、私は本当に困惑しています。
予期しない値の私の推測は次のとおりです。
- カーソル位置を取得するプロセスがカーソル画像の間違ったコーナーにある可能性があります
- 何らかの理由でメソッド/関数がボタンで機能しない
performance - Box2d raycast と AABB クエリのパフォーマンス
現在、box2d 物理 (実際には box2dlights) を利用するゲームのパフォーマンスを改善しようとしています。
既知の領域内でいくつか (たとえば、約 16 ~ 64) のレイキャストを作成する方法があります。レイキャストが報告できるものがあるかどうかを確認するために、最初のステップでその領域の AABB クエリを作成することをお勧めします。そうでない場合は、レイキャストをスキップできます。しかし、AABB クエリで何かが見つかった場合は、レイキャストを作成する必要があり、クエリは冗長でした。AABB クエリは、レイキャスト (特に box2d) と比較してどのくらい高速ですか? いくつかのレイキャストを順番にスキップできる場合、しばしば余分な AABB クエリを作成することは良い考えですか?
java - AABB 衝突 - 特定の壁に向かって移動するとスタックする
境界ボックスがプレイヤーの境界ボックスを最後の位置と次の位置から取得する単純な AABB システムを実装しようとしています。次のバウンディング ボックスは、不正な移動 (壁を通り抜けるなど) を防ぐために変更する必要があります。
現在、私のコードはある程度機能しています。たとえば、一方向のみ (キーボード コントロール) に移動すると、正確に正しいポイントで停止します。
白い四角が実際のバウンディング ボックスで、赤い境界線が排他的な右と下の座標であることに注意してください (したがって、赤い線が地形の内側にあるのは正しいことです)。
2 つの軸で同時に移動しようとすると、実際の問題が発生します。たとえば、一番上の壁を抱きながら ( を押しながらW
) 左に移動すると、プレイヤーは通常の 16*16 の間隔で (すべてのタイルの端で) 動けなくなります。これを整理したら、バウンディング ボックスをグループ化する貪欲なアルゴリズムを作成しますが、現在BoundingBox
、マップ内の塗りつぶされたタイルごとに 1 つしかint i, j; boxes.add(new BoundingBox(new Vec2(i = x * 16, j = y * 16), new Vec2(i + 16, j + 16)));
ありません。GIF で何が起こっているかを示す方が簡単かもしれません。
このcollide
関数は、境界ボックスごとに呼び出されます。プレーヤーの最後の位置と、最後のボックスから変更された位置が、左上から始まり、X が最初にインクリメントされます。境界ボックスのコードは次のとおりです。
おそらく、この問題は操作の順序と関係がありますか? 可能性は低いと思われますが、if
内部の 2 つのステートメントの順序を反転するとcollide
、動作が変わるようです。つまり、立ち往生する壁が変更されます。
私が知る限り、最初に衝突が発生したとき、結果のベクトルは壁の外側にあるはずなので、衝突しなくなります。ここには何らかの論理エラーがあるはずですが、自分で見つけることはできません。
リクエストに応じて、このペーストビンで追加のコードを利用できます: http://pastebin.com/ueBAKJ9C