ATTENTION : ceci est la documentation d'une version antérieure de SFML ; la documentation de la dernière version officielle est accessible via le menu principal

Tutoriel - Module graphique - Afficher du texte

Introduction

Dans ce tutoriel, nous allons couvrir le rendu de texte à l'aide de la classe sf::String.

Créer une chaîne graphique

Afin d'afficher du texte dans une fenêtre, il faut créer une instance de sf::String. Une telle instance possède trois paramètres : le texte à afficher, la police de caractères utilisée, et la taille des caractères. Notez bien que sf::String n'est pas une classe de chaînes de caractères dans le sens de std::string, c'est-à-dire qu'elle ne fournit aucune fonction ayant un rapport avec la manipulation de la chaîne en elle-même comme par exemple find, append, substring, etc. Elle focalise uniquement sur la partie graphique, et laisse la manipulation de la chaîne à std::string (ou n'importe quelle autre classe que vous préférez utiliser).

Donc, voici comme nous définirions une chaîne contenant le texte "Hello", utilisant la police "arial.ttf", et avec une taille de caractères de 50 :

sf::String Text("Hello", "arial.ttf", 50.f);

// Ou, si vous souhaitez le faire après la construction :

sf::String Text;
Text.SetText("Hello");
Text.SetFont("arial.ttf");
Text.SetSize(50.f);

Vous pouvez également utiliser des chaînes de caractères larges, si vous comptez utiliser du texte unicode :

Text.SetText(L"Hello");

Si le fichier contenant la police de caractères ne peut pas être chargé, ou n'est pas spécifié, une police par défaut est utilisée.

La police est en fait chargée à la première utilisation et avec la taille de caractères donnée, mais vous pouvez forcer le chargement à n'importe quel moment et avec n'importe quelle taille, via la fonction statique PreloadFont :

sf::String::PreloadFont("arial.ttf", 100.f);

Notez que SFML est capable de charger tout type de fichier de police de caractère (TTF, CFF, PCF, BDF, et beaucoup d'autres).

Par défaut, le jeu de caractères standard est chargé (codes ASCII de 31 à 255), mais il est possible de fournir votre propre jeu de caractères si vous comptez utiliser du texte unicode (comme par exemple des caractères chinois) :

std::wstring Charset = L"...";
sf::String::PreloadFont("arial.ttf", 100.f, Charset);

Notez que sf::String utilise en interne des chaînes larges (types std::wstring et wchar_t), et qu'utiliser des chaînes multi-octets (std::string et char) nécessitera des conversions qui peuvent être chères. Ainsi, dans la mesure du possible, préférez toujours utiliser des chaînes larges pour obtenir un maximum de performances.

Afficher une chaîne

sf::String est une classe affichable standard, ce qui signifie qu'elle hérite de sf::Drawable et reçoit tous des attributs et fonctions, tout comme sf::Sprite.
Ainsi vous pouvez modifier sa position, sa taille, son orientation, sa couleur, etc. :

Text.SetColor(sf::Color(128, 128, 0));
Text.SetRotation(90.f);
Text.SetScale(2.f);
Text.Move(100.f, 200.f);

Puis, pour afficher la chaîne dans une fenêtre donnée, vous n'avez qu'à utiliser la fonction Draw :

sf::RenderWindow Window;
...
Window.Draw(Text);

Conclusion

C'est tout ce qu'il y a à dire à propos des chaînes SFML. Vous pouvez maintenant afficher du texte avec différentes polices, utilisant toutes les fonctionnalités graphiques des objets affichables de la SFML.
Vous pouvez maintenant vous rendre au tutoriel suivant, qui vous montrera comment ajouter des post-effects temps réel à vos graphiques.

Téléchargez le code source :