0% ont trouvé ce document utile (0 vote)
22 vues1 page

Text and Fonts - Simple and Fast Multimedia Library

Le document présente la bibliothèque SFML 3.0, en se concentrant sur la gestion des polices et du texte. Il explique comment charger une police, dessiner du texte et gérer les caractères non-ASCII, tout en soulignant l'importance de s'assurer que la police utilisée contient les glyphes nécessaires. Enfin, il mentionne la possibilité de créer des classes de texte personnalisées pour des fonctionnalités avancées.

Transféré par

dongfackjovialp
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
22 vues1 page

Text and Fonts - Simple and Fast Multimedia Library

Le document présente la bibliothèque SFML 3.0, en se concentrant sur la gestion des polices et du texte. Il explique comment charger une police, dessiner du texte et gérer les caractères non-ASCII, tout en soulignant l'importance de s'assurer que la police utilisée contient les glyphes nécessaires. Enfin, il mentionne la possibilité de créer des classes de texte personnalisées pour des fonctionnalités avancées.

Transféré par

dongfackjovialp
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

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 non­ASCII ?
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 celle­ci, et lire ses attributs. Dans un programme typique, vous
n'aurez qu'à utiliser la première fonctionnalité, charger la police, alors concentrons­nous d'abord sur celle­ci.
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, assurez­vous 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 non­ASCII (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 (UTF­16 ? UTF­32 ?). 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 UTF­8,
UTF­16 et UTF­32.

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, rappelons­le) 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 ci­dessous).

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 UTF­32 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

Vous aimerez peut-être aussi