È facile: i caratteri non devono necessariamente corrispondere alla risoluzione, ma devono corrispondere alla densità dei pixel .
La densità dei pixel viene misurata come pixel per pollice ( PPI ) o pixel per centimetro. C'è anche un'unità di misura chiamata pixel indipendenti dalla densità ( DP ) . È definito 1dp
la dimensione di un pixel su uno 160 PPI
schermo.
Ora tornando ai caratteri, prova a fare questo test: metti il tuo laptop su 720p. Dai un'occhiata alla dimensione del carattere. Ora collegalo al monitor 1080p da 42 "del desktop. Se il monitor emette le giuste informazioni sulla sua dimensione, il font dovrebbe avere ESATTAMENTE le stesse dimensioni che aveva sullo schermo a 720p. Immagina quanto sarebbe strano se il testo nel tuo il laptop aveva dimensioni diverse rispetto al testo sul monitor del desktop. Detto questo, risoluzioni più grandi dovrebbero fornire maggiori dettagli al carattere, schermi più grandi dovrebbero dare più contenuti da mostrare.
Lo stesso fatto può essere osservato sugli editor di testo. Un 72pt
carattere dovrebbe apparire sullo schermo come se fosse stampato su carta.
Tutto ciò significa che probabilmente dovresti desiderare la stessa dimensione in tutte le dimensioni del display (con alcune eccezioni). Se vuoi basarti da qualche parte, i siti Web di solito usano 12pt
caratteri, usi 11pt
e 12pt
caratteri di MS Windows .
Questo grafico (incluso anche nella parte inferiore della risposta) che ci dice 12pt
in CSS è approssimativamente uguale a 16px
anche in CSS (Come se ciò non fosse abbastanza confuso, un px in CSS è uguale a dp ovunque), quindi diciamo che 16dp
creerò i tuoi caratteri su LibGDX.
Nel tuo gioco, usa il FreeTypeFontGenerator
per generare i caratteri in modo dinamico, in questo modo puoi considerare la densità dello schermo quando li crei:
BitmapFont createFont(FreeTypeFontGenerator ftfg, float dp)
{
return ftfg.generateFont((int)(dp * Gdx.graphics.getDensity()));
}
//On Init
BitmapFont buttonFont = createFont(arial, 16); //16dp == 12pt
Questo funziona perché Gdx.graphics.getDensity()
è uguale a YourScreenDensity/160
così, è un "fattore di scala" per portare le cose alle dimensioni che sarebbero su uno schermo di 160ppi.
A proposito delle eccezioni che ho menzionato prima: probabilmente vorrai ridimensionare i caratteri in base alle dimensioni dello schermo in caso di loghi, promozioni, ecc. Ma tieni presente che farai meglio a realizzarli su un editor grafico come Photoshop o Gimp , Comunque.
L'altra eccezione è il testo su piccoli schermi. Schermi telefonici da 4,5 "o più piccoli, indossabili. Di solito non avrai il tempo di creare contenuti scorrevoli o semplicemente non potrai permetterti di mettere così tanto contenuto su quello schermo. Puoi provare a ridimensionare il carattere 1dp
, come il il lettore probabilmente avrà il telefono molto vicino al viso, probabilmente non avrà problemi a leggere. Tieni presente che potresti infastidire il lettore che legge un piccolo testo illeggibile.
TL; DR:
- Le dimensioni fisiche non cambieranno direttamente con le dimensioni dello schermo o la risoluzione, ma con una combinazione di entrambi (
screenSize/resolution
il famoso PPI)
- Pensa a pt e dp . Dimentica i pixel dello schermo fino a quando non devi disegnare il risultato finale.
- Crea il tuo carattere in fase di esecuzione con una dimensione ragionevole.
- Conversione di dp in pixel dello schermo:
pixels = dp * Gdx.graphics.getDensity();
- Se stai usando un motore che non ti dà un convertitore in dp come quello di LibGDX
Gdx.graphics.getDensity()
, puoi provare :, densityFactor = Screen.getPixelsPerInch() / 160.0f
allorapixels = dp * densityFactor
MODIFICARE:
2014, 25 giugno su Google IO, Matias ha annunciato nuove linee guida di stile per Android, che include un nuovo carattere Roboto e linee guida per la tipografia. Prendi questa tabella come guida:
EDIT2:
Tabella delle dimensioni dei caratteri CSS inclusa nel caso in cui il collegamento diventi marcio: