Come posso ottenere un bellissimo testo di piccole dimensioni in XNA senza utilizzare librerie esterne?


13

In XNA, la tecnologia spritefont è orribile. Nuclex fa il lavoro molto meglio, ma non voglio avere riferimenti esterni e ho quasi finito il mio gioco.

Quando si usano caratteri come Sansation o Quicksand, sembra terribile in caratteri più piccoli. È così brutto!

Esiste una soluzione nota per questo? Ho provato a impostare le dimensioni dei caratteri su estremamente alte, e poi ridimensionandole nello spritebatch senza fortuna.


Uso SpriteFont per creare i miei caratteri per XNA, hai molta flessibilità. Mi assicuro anche che la posizione del carattere sia un numero intero in modo che non si verifichino antialias negativi, ma questa probabilmente non è un'ottima soluzione. Puoi provare a filtrare i punti anche nelle tue chiamate di testo spritebatch.
Jonathan Connell,

Non dimenticare di testare i tuoi caratteri piccoli su una varietà di dispositivi e persone reali. Se è un titolo a 360 ° e quindi destinato alla TV, le dimensioni di tutti gli elementi visivi tendono ad essere leggermente più grandi rispetto allo schermo di un PC.
Lars Viklund,

Sto facendo un gioco per PC e la dimensione del carattere è impostata su un numero intero.
Mathias Lykkegaard Lorenzen il

1
Non ridimensionare i testi, crea uno spritefont per ogni dimensione di cui hai bisogno.
Wouter,

1
Alcune altre regole per te qui. Blocca il vettore di posizione su numeri interi prima del rendering, altrimenti il ​​campionamento renderà il tuo testo di output spazzatura . Potrebbe valere la pena cambiare il campionatore di trama in Punto / Vicino più vicino prima di eseguire il rendering del testo. Soprattutto se il tuo carattere è
pixelato

Risposte:


11

XNA ti consente di importare una trama come spritefont . Probabilmente puoi ottenere suggerimenti e anti-aliasing migliori nel tuo carattere se disponi manualmente ogni personaggio in un buon programma di modifica delle immagini, piuttosto che fare affidamento sul foglio di sprite che XNA genera.


13

Il processore di caratteri sprite XNA utilizza la compressione DXT3 che non funziona bene con la nuova alfa premoltiplicata in XNA 4.0. Da qui l'aspetto a blocchi del testo.

Il processore di caratteri sprite Nuclex genera esattamente gli stessi dati, tranne per il fatto che l'interno Texture2Dche contiene i dati bitmap del carattere non è compresso, quindi non ha problemi di qualità.

Poiché i dati del processore Nuclex sono nello stesso formato, il SpriteFontlettore XNA può leggerli e non è necessario includere alcuna libreria Nuclex per la distribuzione con il gioco.

(Ti consente anche di utilizzare comodamente lo stesso formato XML delle definizioni dei caratteri sprite nativi di XNA.)

Detto questo: non c'è niente di sbagliato nel raggruppare librerie esterne con il tuo gioco. Non è che vengano installati sul tuo sistema o altro. (Potresti anche arrivare al punto di unire le due assemblee).

E la stessa cosa vale per il codice (se sei preoccupato per il controllo della versione, per esempio). Puoi semplicemente inserire Nuclex.Fonts.Content.TrueTypeImporter.dllil codice sorgente. In realtà non è un grosso problema.


9

È possibile utilizzare i caratteri pixel :

variante pf tempesta

Quando si utilizza un carattere pixel della dimensione del carattere per cui è stato progettato (o un intero multiplo, ad esempio 2x, 3x, 4x), si ottiene un testo perfetto per i pixel che non richiede anti-aliasing. Ciò significa che non dovrai mai fare i conti con il terribile anti-aliasing che rende i caratteri di sprite di XNA così cattivi e Nuclex molto meglio. ( Questo articolo esamina questo problema e li confronta)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.