矩形碰撞检测SDL 2.0

时间:2013-12-19 06:39:14

标签: c++ sdl rectangles

我遇到矩形切割问题,这里的算法是:

我检测到r1(renctangle 1)是否高于r2(矩形2):

int BottomA = A.x+A.h;
int TopB = B.x;

if(TopB>BottomA)
{
Gravity();
}

但是彼此重叠,我已经测试了在2个重叠(10或15个像素,有时更少)的情况下,在一秒钟内限制了60次,或者没有时间限制。并且重叠打破了横向切割的代码。

1 个答案:

答案 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;
}

如果场景中有这么多对象,则可以使用空间细分方法。有许多空间细分方法,例如递归地划分为两个子空间,递归地划分为八个子空间,或者划分为网格。