1

作成中のゲームでの衝突検出に関して問題が発生しています。これを使用して、2つのオブジェクト間の距離があります。

    double b1Dist = Math.sqrt((obOneX - obTwoX) * (obOneX - obTwoX)
            + ((obOneY - obTwoY) * (obOneY - obTwoY)));
    double b1DistTwo = b1Dist - objectOneRadius;
    b1DistFinal = b1DistTwo - objectTwoRadius;

そして私はこれで衝突検出を行おうとしていました:

  if (b1DistFinal <= objectOneRadius && b1DistFinal <= objectTwoRadius ) {
            return false;
        }
         else
            return true;

    }

私はJavaを初めて使用するので、上記を書くためのより良い/より効率的な方法があると確信していますが、誰かが私を助けたり、正しい方向に向けたりしてくれませんか?

ありがとう

4

1 に答える 1

1

その効率には何の問題もありません。ただしobOneX、、、obOneYなどがオブジェクトの中心のx座標とy座標である場合、式は間違っています。

変数b1DistFinalは、2つのオブジェクトの外縁間の距離です。ゼロの場合、それらのオブジェクトは衝突しています。

試す:

if (Math.abs(b1DistFinal) < 0.001) {
    return true;
} else {
    return false;
}

注:正確にゼロであるかどうかを確認するのではなく、二重演算中の丸め誤差を考慮して、ゼロに近いかどうかを確認しています。

于 2013-03-24T04:15:36.177 に答える