我正在制作一款关于碰撞检测的问题。我使用这两个对象之间的距离:
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的新手,所以我确信这可能是更好/更有效的方式来编写上述内容,但有人可以帮助我或指出我正确的方向吗?
由于
答案 0 :(得分:1)
效率没有任何问题。但是,如果obOneX
,obOneY
等是对象中心的x和y坐标,那么您的公式就错了。
变量b1DistFinal
是两个对象外边缘之间的距离。如果它为零,那些对象就会发生碰撞。
尝试:
if (Math.abs(b1DistFinal) < 0.001) {
return true;
} else {
return false;
}
注意:我没有检查它是否正好为零,而是检查它是否关闭为零,以便在双重算术期间出现一些舍入错误。