La structure squelettique d'un jeu vidéo, tu te lances dans tout un sujet
Des mots clefs pour tes recherches sont : states manager.
Chaque "moment" du jeu (intro, menu principale, gameplay, menu pause, etc.) peut être un "état", et ces état s'empilent les uns sur les autres. L'état tout en haut de la pile est l'état actif.
Par exemple tu es dans le jeu, tu appuies sur échap, ça ajoute l'état "menu pause" par dessus l'état "gameplay", ce qui fait que la boucle principale de ton programme maintenant s'occupe uniquement du menu pause, le jeu lui-même n'est plus calculé, il est en pause.
Pour les "freeze" de ton personnage : utilises-tu bien le temps comme mesure pour les déplacements de ton personnages, ou bien les tours de boucle? C'est à dire, par exemple quand tu laisses la touche pour aller vers la gauche enfoncée, se déplace-t-il de x pixels par secondes ou bien de x pixel par tour de boucle (ou frame) ? Si c'est le deuxième cas, sa vitesse de déplacement sera différente selon la puissance de la machine, et sera saccadé à chaque baisse de fps.
Autrement, tu peux régler le maximum de frame par seconde directement avec une fonction de la RenderWindow de la SFML (60 fps est une valeur suffisante), ou choisir la synchronisation verticale (le fps est synchronisé au taux de rafraîchissement de ton écran). Consulte la doc de sf::Window ou sf::RenderWindow.