SFML
Machine Translated by Google
Bibliothèque Multimédia Simple et Rapide Recherche 3.0.1 11,2 k 1,8k
Accueil Apprendre Tutoriels Documentation Télécharger Communauté Développement Faire un don
Tutoriels
Texte et polices Table des matières
SFML 3.0 Chargement d'une police
Démarrage Texte dessin
Système Chargement d'une police Comment éviter les problèmes avec
les caractères nonASCII ?
Fenêtre
Avant de dessiner un texte, vous devez disposer d'une police disponible, comme tout autre programme qui imprime du texte.
Faire votre propre cours de texte
Graphiques Les polices sont encapsulées dans le sf:: Police classe, qui fournit trois caractéristiques principales : charger une police, obtenir
Dessiner des trucs en 2D des glyphes (c'estàdire des caractères visuels) à partir de celleci, et lire ses attributs. Dans un programme typique, vous
n'aurez qu'à utiliser la première fonctionnalité, charger la police, alors concentronsnous d'abord sur celleci.
Sprites et textures
Texte et polices
La manière la plus courante de charger une police consiste à partir d'un chier sur le disque, ce qui se fait avec le ouvrirFromFile
Formes fonction ou son constructeur correspondant.
Concevoir vos propres entités
avec des tableaux de sommets sf::Police police("arial.ttf"); //Lance sf : : Exception si une erreur se produit
//OU
Position, rotation, échelle :
Transformer les entités sf::Police police; si (!
police'.ouvrirFromFile("arial.ttf")) {
Ajout d'eets spéciaux avec des
shaders
//erreur...
Contrôle de la caméra 2 D }
avec vues
Notez que SFML ne chargera pas vos polices système automatiquement, c'estàdire. font.openFromFile (« Courier Nouveau ») ne
Audio
fonctionnera pas. Premièrement, parce que SFML l’exige noms de chiers« Pas de noms de polices, et deuxièmement, parce que
Réseau SFML n'a pas d'accès magique au dossier de polices de votre système ». Si vous souhaitez charger une police, vous devrez inclure
SFML 2.6 le chier de police avec votre application comme toutes les autres ressources (images, sons, ...).
Le ouvrirFromFile la fonction ou le constructeur correspondant peut parfois échouer sans raison évidente.
Tout d'abord, vériez le message d'erreur que SFML imprime sur la sortie standard (cochez la console). Si le message ne parvient
pas à ouvrir le chier, assurezvous que le répertoire de travail (qui est le répertoire auquel tout chemin de chier sera interprété
par rapport) est ce que vous pensez être : lorsque vous exécutez l'application depuis votre environnement de bureau, le
répertoire de travail est le dossier exécutable. Cependant, lorsque vous lancez votre programme depuis votre IDE (Visual
Studio, Code : : Blocks, ...), le répertoire de travail peut parfois être déni sur le projet répertoire plutôt. Cela peut généralement
être modié assez facilement dans les paramètres du projet.
Vous pouvez également charger un chier de police depuis la mémoire ( ouvrirFromFile ), ou d'un ux d'entrée personnalisé
( ouvrirFromStream ). Les constructeurs correspondants existent avec les mêmes paramètres qui lancent une exception en cas
de panne.
SFML prend en charge les formats de polices les plus courants. La liste complète est disponible dans la documentation de
l'API.
C'est tout ce que tu dois faire. Une fois votre police chargée, vous pouvez commencer à dessiner du texte.
Texte dessin
Pour dessiner du texte, vous utiliserez le sf::Texte classe. C'est très simple à utiliser :
sf::Texte texte(police); //une police est nécessaire pour créer un objet texte
// définir la chaîne à afficher
texte'.définirString("Bonjour le monde");
// définir la taille des caractères texte'.définir la taille
des caractères(24); //en pixels, pas en points !
// définir la couleur
texte'.définirFillColor(sf::Couleur::Rouge);
// définir le style du texte
texte'.setStyle(sf::Texte::Audacieux | sf::Texte::Souligné);
...
//à l'intérieur de la boucle principale, entre window.clear () et window.display () fenêtre'.dessiner(texte);
Le texte peut également être transformé : il possède une position, une orientation et une échelle. Les fonctions impliquées sont
les mêmes que pour sf::Sprite. classe et autres entités SFML. Elles sont expliquées dans la section « Transformation des
entités ». tutoriel.
Comment éviter les problèmes avec les caractères non ASCII ?
Gérer correctement les caractères nonASCII (tels que les caractères accentués européens, arabes ou chinois) peut s'avérer
complexe. Cela nécessite une bonne compréhension des différents codages impliqués dans l'interprétation et le tracé de votre texte.
Pour éviter de vous soucier de ces codages, une solution simple existe : utiliser des chaînes littérales larges.
text.setString(L""(;חאטי
C'est ce simple préfixe « L » devant la chaîne qui la fait fonctionner en indiquant au compilateur de produire une chaîne large. Les
chaînes larges sont une étrange bête en C++ : la norme ne précise rien sur leur taille (16 bits ? 32 bits ?), ni sur l'encodage qu'elles
utilisent (UTF16 ? UTF32 ?). Cependant, nous savons que sur la plupart des plateformes, voire toutes, elles produisent des chaînes
Unicode, et SFML sait les gérer correctement.
Notez que la norme C++11 prend en charge de nouveaux types de caractères et préexes pour créer des littéraux de chaîne UTF8,
UTF16 et UTF32.
Cela peut paraître évident, mais il faut aussi s'assurer que la police utilisée contient les caractères que l'on souhaite représenter. En
effet, les polices ne contiennent pas de glyphes pour tous les caractères possibles (il en existe plus de 100 000 dans la norme
Unicode !). Une police arabe ne pourra pas afficher du texte japonais, par exemple.
Créer votre propre classe de texte
Si sf::Text est trop limité, ou si vous voulez faire autre chose avec des glyphes prérendus, sf::Font fournit tout ce dont vous
avez besoin.
Vous pouvez récupérer la texture qui contient tous les glyphes prérendus d'une certaine taille :
const sf::Texture& texture = font.getTexture(characterSize);
Il est important de noter que les glyphes sont ajoutés à la texture lorsqu'ils sont demandés. Le nombre de caractères est tellement
important (plus de 100 000, rappelonsle) qu'ils ne peuvent pas tous être générés au chargement de la police. Ils sont alors rendus
instantanément lors de l'appel de la fonction getGlyph (voir cidessous).
Pour faire quelque chose de significatif avec la texture de la police, vous devez obtenir les coordonnées de texture des glyphes
qu'elle contient :
sf::Glyph glyphe = font.getGlyph(caractère, taille du caractère, gras);
Le caractère correspond au code UTF32 du caractère dont vous souhaitez obtenir le glyphe. Vous devez également préciser la taille
du caractère et indiquer si vous souhaitez une version en gras ou standard du glyphe.
Le sf::Glyph la structure contient trois membres de données d'intérêt.
advance est l'oset horizontal à appliquer pour obtenir la position de départ du glyphe suivant dans le texte
bounds contient le rectangle de délimitation du glyphe, ce qui permet de le positionner par rapport à la ligne de base du texte
textureRect contient les coordonnées de texture du glyphe dans la texture
Vous pouvez également obtenir certaines des autres mesures de la police, telles que le crénage entre deux caractères ou
l'interligne (toujours pour une certaine taille de caractère) :
float lineSpacing = font.getLineSpacing(characterSize);
crénage flottant = font.getKerning(caractère1, caractère2, taillecaractère);
Précédent Suivant
Sprites et textures Formes
Copyright © Laurent Gomila