Hi,
for the scaling stuffs, SetScale is an assign method (Doesn't matter how many times you call SetScale, the final scale wiil the last call), Scale (float, float) keep multiply the actual scale by the factor. Example :
sf::Image Image;
if (!Image.LoadFromFile("randomImage.bmp"))
return EXIT_FAILURE;
sf::Sprite Sprite(Image);
for(int i = 0; i < 3; i++)
Sprite.SetScale(1.1f, 1.1f);
// final scaling factor is 1.1, 1.1
//..
for(int i = 0; i < 3; i++)
Sprite.Scale(1.1f, 1.1f);
// final scaling factor is 1.331, 1.331
The same logic apply to Move/SetPosition and Rotate/SetRotation.
For overlapping sprite, you could do it with a simple Sprite encapsulation and some Rect<T>.Intersects call.