次のコードでは、衝突は検出されますが、側面が正しく登録されません。
public int checkBoxes(int aX, int aY, int aWidth, int aHeight, int bX, int bY, int bWidth, int bHeight){
/*
* Returns int
* 0 - No collisions
* 1 - Top
* 2 - Left
* 3 - Bottom
* 4 - Right
*/
Vector2f aMin = new Vector2f(aX, aY);
Vector2f aMax = new Vector2f(aX + aWidth, aY + aHeight);
Vector2f bMin = new Vector2f(bX, bY);
Vector2f bMax = new Vector2f(bX + bWidth, bY + bHeight);
float left = bMin.x - aMax.x;
float right = bMax.x - aMin.x;
float top = bMin.y - aMax.y;
float bottom = bMax.y - aMin.y;
if(left > 0) return 0;
if(right < 0) return 0;
if(top > 0) return 0;
if(bottom < 0) return 0;
int returnCode = 0;
if (Math.abs(left) < right)
{
returnCode = 2;
} else {
returnCode = 4;
}
if (Math.abs(top) < bottom)
{
returnCode = 1;
} else {
returnCode = 3;
}
return returnCode;
}
A が形状 B の上、左、または右に衝突している場合は 3 が返され、下に衝突している場合は 1 が返されます。何が原因なのかよくわかりません。コードの何が問題になっていますか?