我正在开发一个Java游戏(但开发语言并不重要),包括圆形物体,如球或冰球,现在正在进行碰撞.
我使用计时器,所以在每一帧我检查是否发生碰撞.
这是一个表示对象右上角的图形.
对象的中心由点[0,0]表示,其半径为10px,单位为像素.
现在,如果我的对象(例如,obj_1)是方形/菱形(蓝线),要查找是否有另一个(obj_2)碰撞它,我只需要获取它们的坐标并检查Math.abs(obj_1.x – obj_2) .x)Math.abs(obj_1.y – obj_2.y)< = radius我会知道是否有碰撞. 但问题是圆形(红线)更棘手,因为它需要更多的空间,这个占用的空间不受直线的限制.当然我必须舍入一些值(例如在上图中,如果我想在x = 2处检查碰撞,我将必须舍入y值,看起来像9.5到10).但我根本不知道如何得到这个公式.任何帮助将非常感激.
解决方法:
正如您所提到的实现语言并不重要,我将为您提供一个检测圆形对象碰撞的通用解决方案.
另外,根据我收集的内容,场景中的所有对象都是圆圈.以下解决方案不适用于检测圆与其他形状之间的碰撞.
假设你有两个圆圈c1和c2.假设相应的半径是c1.r和c2.r,中心是(c1.x,c1.y)和(c2.x,c2.y),那么下面的函数将告诉c1和c2是否在碰撞中
boolean areColliding(Circle c1, Circle c2){
center_distance = sqrt((x1-x2)^2 +(y1-y2)^2); //this is the distance between the centers of the two circles.
if((c1.r+c2.r) < center_distance)
return false;
else
return true;
}
如果圆圈碰撞,则此伪代码函数将返回true,否则返回false.
基本上,该功能的作用是检查圆心之间的距离是否大于它们各自半径的总和.