gpt4 book ai didi

c++ - 矩形碰撞检测 SDL 2.0

转载 作者:行者123 更新时间:2023-11-28 07:13:05 25 4
gpt4 key购买 nike

我遇到了矩形碰撞的问题,这里是算法:

我检测 r1(rectangle 1) 是否在 r2(rectangle 2) 之上:

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

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

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

最佳答案

首先,碰撞检测与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;
}

如果你的场景中有这么多物体,你可以使用空间 segmentation 的方法。空间划分的方法有很多,如递归划分为两个子空间、递归划分为八个子空间、划分为网格等。

关于c++ - 矩形碰撞检测 SDL 2.0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20674967/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com