SDL中的每像素2D圆形碰撞检测

时间:2010-12-24 16:10:49

标签: c++ gcc ubuntu sdl collision-detection

好吧,直到它,我正在使用this指南,因为我学习SDL并且我遇到了每像素碰撞部分的困难。我对此的实现与指南略有不同,它导致了一些不必要的问题。问题是移动的球直接穿过固定的球(它意味着坚固并阻挡你正在想象的移动球)。我知道矩形碰撞盒在适当的位置,因为我已经将移动的球重新塑造为白色(ball.bmp的颜色为红色),静止的球为蓝色,每个球顶部的碰撞盒已被重新塑造。

我的碰撞检测功能如下

bool checkCol(std::vector<SDL_Rect> A,std::vector<SDL_Rect> B){
    int TOP1,           TOP2;
    int BOTTOM1,    BOTTOM2;
    int LEFT1,          LEFT2;
    int RIGHT1,     RIGHT2;
    for (int i = 0; i < A.size(); i++){
        TOP1         =      A[ i ].y;
        BOTTOM1  =      A[ i ].y + A[ i ].h;
        LEFT1        =      A[ i ].x;
        RIGHT1       =      A[ i ].x + A[ i ].w;
        for (int j = 0; j < B.size(); j++){
            TOP2         =      B[ i ].y;
            BOTTOM2  =      B[ i ].y + B[ i ].h;
            LEFT2        =      B[ i ].x;
            RIGHT2       =      B[ i ].x + B[ i ].w;

            if ( RIGHT1 <= LEFT2 ){ return false; }
            if ( LEFT1 >= RIGHT2 ){ return false; }
            if ( TOP1 >= BOTTOM2 ){ return false; }
            if ( BOTTOM1 <= TOP2 ){ return false; }
        }
    }
    return true;
}

here是完整的源代码(太大而无法发布)和可执行文件(linux)。

有人可以告诉我哪里出错了吗?。

[编辑] 忽略中间的矩形。

1 个答案:

答案 0 :(得分:1)

看起来算法逻辑不正确。如果您有一个条件列表,并且想要检查所有条件是否为false,那么一旦找到一个,就不应该return false;是假的。