Я делаю игру в понг, используя c ++ с SFML.В большинстве случаев обнаружение столкновений работает хорошо;однако, иногда это терпит неудачу прямо, не давая сообщения об ошибках.Это делает это, по-видимому, непредсказуемо, так что это не только одно обстоятельство, которое вызывает это, поэтому я не знаю, в чем проблема.Вот код для обнаружения столкновения:
bool circleRectCollisionDetection(int CircleX,int CircleY,int CircleRadius,int RectX,int RectY,int RectWidth,int RectHeight){
int DeltaX = CircleX - max(RectX, min(CircleX, RectX + RectWidth));
int DeltaY = CircleY - max(RectY, min(CircleY, RectY + RectHeight));
return (DeltaX * DeltaX + DeltaY * DeltaY) < (CircleRadius * CircleRadius);
}
А вот как он называется:
int ballx = ball->getX();
int bally = ball->getY();
int rotation = ball->getRotation();
int player1x = player1->getX();
int player2x = player2->getX();
int player1y = player1->getY();
int player2y = player2->getY();
//left Paddle
if(circleRectCollisionDetection(ballx,bally,30,player1x,player1y,30,150)){
cout<<"1"<<endl;
ball->setX(player1x+80);
ball->invertXFunc();
}
//right paddle
if(circleRectCollisionDetection(ballx,bally,30,player2x,player2y,30,150)){
cout<<"2"<<endl;
ball->setX(player2x-80);
ball->invertXFunc();
}