首先,碰撞检测与 SDL 无关。 SDL 只显示事物。
您似乎正在使用轴对齐的框。 Axis-aligned box 的碰撞检测是最简单的条件。您只需在两个轴上检查它们(如果您在 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;
}
如果场景中有这么多物体,可以使用空间细分方法。空间细分的方法有很多,比如递归分割成两个子空间,递归分割成八个子空间,或者分割成网格。