Java でかなり単純な 2D 衝突検出を実装していますが、衝突が発生した面(またはヒット ボックスの側面) を特定する方法に少しつまずいています。
私はこのサイトの質問に目を通し、他の場所で広範な Google-fu を試みましたが、最も近いものは次のようなものでした:
public Side getCollisionSide(Rectangle main, Rectangle incoming) {
boolean toTheLeft = main.getX() - incoming.getX() < 0;
boolean toTheTop = main.getY() - incoming.getY() < 0;
// ...but what can I do from here?
}
問題は、これが実際にどちらの側に衝突したかを示していないことです。の座標として設定された原点を持つグリッドで、衝突が発生した象限を教えてくれます。main
しかし、オブジェクトmain
が左から衝突した場合 (そしてたまたま Y 軸のフィールドの下にある場合)、この方法を使用しても、衝突が左から発生したのか下から発生したのかわかりません。
これに対する解決策、または単に別の実装を知っている人はいますか?
速度と方向の情報を持つことがいかに利点になるかがわかります (オブジェクトが一度に 1 つの次元しか移動できない場合は、解決策になることさえあります)。ただし、オブジェクトが斜めに移動できる場合、同じ問題を回避する方法がわかりません。