我正在开发一个 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 and c2。假设对应的半径为c1.r and c2.r,并且中心是(c1.x,c1.y) and (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,否则为 false。
基本上,该函数的作用是检查圆心之间的距离是否大于它们各自半径的总和。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)