我遇到矩形切割问题,这里的算法是:
我检测到r1(renctangle 1)是否高于r2(矩形2):
int BottomA = A.x+A.h;
int TopB = B.x;
if(TopB>BottomA)
{
Gravity();
}
但是彼此重叠,我已经测试了在2个重叠(10或15个像素,有时更少)的情况下,在一秒钟内限制了60次,或者没有时间限制。并且重叠打破了横向切割的代码。
答案 0 :(得分:1)
首先,碰撞检测与SDL无关。 SDL只显示事物。
您似乎正在使用轴对齐框。轴对齐盒的碰撞检测是最简单的条件。您只需在两个轴上检查它们(如果您在3D中工作,则检查三个)。如果任何轴没有重叠,则两个框不重叠。
bool axis_check(int a_min, int a_max, int b_min, int b_max)
{
if (a_max<b_min || b_max<a_min) return false;
else return true;
}
bool box_collision(int a_x_min, int a_x_max, int a_y_min, int a_y_max,
int b_x_min, int b_x_max, int b_y_min, int b_y_max)
{
if (axis_check(a_x_min, a_x_max, b_x_min, b_x_max)
&& axis_check(a_y_min, a_y_max, b_y_min, b_y_max))
return true;
else
return false;
}
如果场景中有这么多对象,则可以使用空间细分方法。有许多空间细分方法,例如递归地划分为两个子空间,递归地划分为八个子空间,或者划分为网格。