Comment obtenir un beau petit texte dans XNA sans utiliser de bibliothèques externes?

13

Dans XNA, la technologie spritefont est horrible. Nuclex fait tellement mieux le travail, mais je ne veux pas avoir de références externes, et j'ai presque fini avec mon jeu.

Lorsque vous utilisez des polices comme Sansation ou Quicksand, cela semble terrible dans les petites tailles des polices. C'est tellement mauvais!

Existe-t-il une solution connue à cela? J'ai essayé de définir les tailles de police sur extrêmement élevé, puis de les réduire dans le spritebatch sans succès.

Mathias Lykkegaard Lorenzen
la source
j'utilise SpriteFont pour créer mes polices pour XNA, vous avez beaucoup de flexibilité. Je m'assure également que la position de la police est un entier afin qu'aucune antialiasing désagréable ne se produise, mais ce n'est probablement pas une excellente solution. Vous pouvez également essayer de filtrer les points dans vos appels de spritebatch texte.
Jonathan Connell
N'oubliez pas de tester vos petites polices sur une variété d'appareils et de personnes réels. S'il s'agit d'un titre 360 ​​et ciblant ainsi les téléviseurs, les tailles de tous les éléments visuels doivent généralement être un peu plus grandes que sur un écran de PC.
Lars Viklund
Je fais un jeu PC et la taille de la police est définie sur un nombre entier.
Mathias Lykkegaard Lorenzen
1
Ne redimensionnez pas les textes, créez un spritefont pour chaque taille dont vous avez besoin.
Wouter
1
Quelques règles supplémentaires pour vous ici. Fixez le vecteur de position aux entiers avant le rendu, sinon l'échantillonnage rendra votre texte de sortie nul . Il peut être utile de changer l'échantillonneur de texture en Point / voisin le plus proche avant de rendre le texte. Surtout si votre police est pixellisée :)
Cubed2D

Réponses:

11

XNA vous permet d'importer une texture en tant que spritefont . Vous pouvez probablement obtenir un meilleur indice et un anti-aliasing dans votre police si vous disposez manuellement chaque caractère dans un bon programme d'édition d'image, plutôt que de vous fier à la feuille de sprite que XNA génère.

Tim R.
la source
13

Le processeur de polices sprite XNA utilise la compression DXT3 qui ne fonctionne pas bien avec le nouvel alpha prémultiplié dans XNA 4.0. D'où l'aspect bloc du texte.

Le processeur de polices sprite Nuclex génère exactement les mêmes données, sauf que l'interne Texture2Dqui contient les données bitmap de police n'est pas compressé - il n'a donc aucun problème de qualité.

Étant donné que les données du processeur Nuclex sont au même format, le XNA SpriteFont lecteur peut les lire et vous n'avez pas besoin d'inclure de bibliothèques Nuclex pour les distribuer avec votre jeu.

(Il vous permet également d'utiliser le même format XML que les définitions de police de sprite natives de XNA.)

Cela étant dit: il n'y a rien de mal à regrouper des bibliothèques externes avec votre jeu. Ce n'est pas comme s'ils étaient installés sur votre système ou quoi que ce soit. (Vous pourriez même aller jusqu'à fusionner les deux assemblages).

Et la même chose vaut pour le code (si vous êtes préoccupé par le contrôle de version, par exemple). Vous pouvez simplement insérer Nuclex.Fonts.Content.TrueTypeImporter.dllvotre code source. Ce n'est pas vraiment un gros problème.

Andrew Russell
la source
9

Vous pouvez utiliser des polices pixel :

pf tempesta variant

Lorsque vous utilisez une police de pixels à la taille de police pour laquelle elle a été conçue (ou un multiple entier, par exemple 2x, 3x, 4x), vous êtes assuré d'avoir un texte parfait au pixel qui ne nécessite pas d'anti-crénelage. Cela signifie que vous n'avez jamais à faire face au terrible anti-aliasing qui rend les polices sprite de XNA si mauvaises et Nuclex tellement mieux. ( Cet article examine ce problème et les compare)

doppelgreener
la source