^ thats the point, if one of those are true then it is know there won't be a collision. If the min of object X is greater than the max of object Y then they won't intersect.
You should follow the coordinate system:
For example if paddle position.y is 0 then ptop is negative. That is backwards to the norm. Normally "up" is positive y.
@Cronnoc
Even though you figured it out, lazyfoo's tutorials are still a decent set of tutorials to look at if you haven't already. Then of course the documentation is always best for reference.
[EDIT]Even though you are using SFML, the underlying concepts are the same so I still think it is beneficial just to glance at lazyfoo's stuff.
Btw SFML provides contains() function for sf::Rect objects which can simplify your collision test. For example your whole collision function can be reduced to this.
You shouldn't really be testing your sf::RectangleShapes directly either instead use sf::Rect objects. For example to call the collision function on one of the paddles and the ball you could do something like this.
1 2 3 4
if (collision(paddle.getGlobalBounds(), ball.getGlobalBounds()))
{
// Do whatever you want to do to handle the collision
}
getGlobalBounds() will return a sf::FloatRect object that represents that objects global bounds (IE all transformations will be taken into account).