Ладно, прямо к нему, я использую это руководство, когда изучаю 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;
}
здесь - полный исходный код (слишком большой для размещения здесь) и исполняемый файл (linux).
Может кто-нибудь сказать мне, где я ошибся?
[править] Игнорировать прямоугольник посередине.