テストをルールに一致させる
軸に揃えられた長方形の場合、各オブジェクトの左、右、上、下の範囲を比較します。オーバーラップは、間隔が両方の軸で交差するときに発生します。円の場合は、中心距離と半径の合計を比較します。グリッド ゲームでは、2 人のアクターが同じセルを要求するかどうかをチェックすることで、ジオメトリを完全に回避できます。
色の異なる形を2つ置いた小さな診断用シーンを作り、設定した当たり判定領域を表示します。境界が接する場合、部分的に重なる場合、当たらずにぎりぎり通過する場合を試します。境界の接触を衝突とみなすか決め、そのルールを一貫して使い、移動と得点判定が食い違わないようにします。
高速なすり抜けを防ぐ
高速オブジェクトは、ある更新では薄い壁の片側に存在し、次の更新では反対側に存在する可能性があります。固定シミュレーション ステップを小さくすると役に立ちますが、これが唯一の答えではありません。移動範囲が障害物の厚さに比べて大きい場合は、スイープ セグメントまたは拡張ターゲットをテストします。
オブジェクトが多い場合は、まず粗いグリッドや空間分割を使って、互いに近づく可能性のないペアを除外します。その後、候補だけを詳しく判定します。この構造を加える前に計測してください。数十個程度のエンティティなら、単純な総当たりのペア判定のほうが保守しやすく、十分な場合があります。
ゲームの衝突検出についての質問
ヒットボックスはスプライトのアウトラインと一致する必要がありますか?
通常はそうではありません。少し寛容な長方形または円を使用すると、コントロールをより公平に感じることができます。開発中にヒットボックスを表示し、意図されたルールとプレイヤーの期待に合わせて調整します。
Canvas は 2 つのスプライトが衝突するかどうかを教えてくれますか?
Canvasには、描画されたパスに対して点を判定する isPointInPath() などのパステストがありますが、ゲームオブジェクト全般の衝突ルールを定義するものではありません。シミュレーションで使う形状は明示し、描画処理から独立させてください。
関連情報
古い情報を見つけましたか? 訂正を連絡