Kolay: Yazı tiplerinin çözünürlükle eşleşmesi gerekmez, piksel yoğunluğuyla eşleşmesi gerekir .
Piksel yoğunluğu inç başına piksel ( PPI ) veya santimetre başına piksel olarak ölçülür . Ayrıca yoğunluktan bağımsız pikseller ( DP ) adı verilen bir ölçü birimi de vardır . 1dp
Bir pikselin 160 PPI
ekranda sahip olduğu boyut olarak tanımlanır .
Şimdi yazı tiplerine geri dönün, bu testi yapmaya çalışın: dizüstü bilgisayarınızı 720p'de çalıştırın. Yazı tipinin boyutuna bir göz atın. Şimdi masaüstünüzün 1080p 42 "monitörüne takın. Monitörünüzün boyutu hakkında doğru bilgileri verirse, yazı tipinin 720p ekranda tam olarak aynı boyutta olması gerekir. Dizüstü bilgisayar masaüstü monitörünüzün metninden farklı bir boyuta sahipti.Bununla birlikte, daha büyük çözünürlükler yazı tipine daha fazla ayrıntı vermeli, daha büyük ekranlar daha fazla içerik gösterilmelidir.
Aynı gerçek metin editörlerinde de görülebilir. Bir 72pt
yazı ekranında o kağıda basılmış ne zaman aynı bakmak gerekir.
Tüm bunlar, tüm ekran boyutlarında (bazı istisnalar dışında) muhtemelen aynı boyutu istemeniz gerektiği anlamına gelir. Kendinizi bir yere dayandırmak istiyorsanız, web siteleri genellikle 12pt
yazı tiplerini, MS Windows kullanır 11pt
ve 12pt
yazı tiplerini kullanır .
Bu grafik (cevabın alt kısmında da yer almaktadır) bize 12pt
CSS'de kabaca CSS'de eşittir 16px
(Bu yeterince kafa karıştırıcı değilse, CSS'deki bir piksel dp ile aynıdır ), yani diyelim ki Yazı tiplerinizi 16dp
LibGDX üzerinde yapacağım.
Oyununuzda, FreeTypeFontGenerator
yazı tiplerini dinamik olarak oluşturmak için kullanın , bu şekilde bunları oluştururken ekran yoğunluğunu göz önünde bulundurabilirsiniz:
BitmapFont createFont(FreeTypeFontGenerator ftfg, float dp)
{
return ftfg.generateFont((int)(dp * Gdx.graphics.getDensity()));
}
//On Init
BitmapFont buttonFont = createFont(arial, 16); //16dp == 12pt
Bu işe yarar, çünkü Gdx.graphics.getDensity()
eşittir YourScreenDensity/160
, 160ppi ekranda olacakları boyuta getirmek için bir "ölçek faktörü".
Daha önce bahsettiğim istisnalar hakkında: muhtemelen yazı tiplerinin logolar, tanıtımlar vb. Durumunda ekran boyutuna göre yeniden boyutlandırılmasını isteyeceksiniz. Ancak bunları Photoshop veya Gimp gibi bir grafik düzenleyicide yapmanın daha iyi olacağını unutmayın. , yine de.
Diğer istisna, küçük ekranlardaki metindir. 4,5 "veya daha küçük telefon ekranları, giyilebilir cihazlar. Genellikle kaydırma içeriği yapmak için zamanınız olmaz veya bu ekrana çok fazla içerik koymayı göze alamazsınız. Yazı tipini 1dp
küçültmeye çalışabilirsiniz . okuyucu muhtemelen telefonun yüzüne çok yakın olacak, muhtemelen okuma problemi olmayacak.Oyuncuyu okunamayan küçük metinleri okuyarak rahatsız edebileceğinizi unutmayın.
TL; DR:
- Fiziksel boyut kabaca ekran boyutu veya çözünürlüğü ile doğrudan değişmez, ancak her ikisinin bir kombinasyonu ile (
screenSize/resolution
ünlü PPI)
- Pt ve dp'yi düşünün . Nihai sonucu çizene kadar ekran piksellerini unutun.
- Yazı tipinizi çalışma zamanında makul bir boyutta oluşturun.
- DP'yi ekran piksellerine dönüştürme :
pixels = dp * Gdx.graphics.getDensity();
- Eğer hayır için dönüştürücü veriyor bir motoru kullanıyorsanız dp LibGDX en gibi
Gdx.graphics.getDensity()
, deneyebileceğiniz: densityFactor = Screen.getPixelsPerInch() / 160.0f
sonrapixels = dp * densityFactor
DÜZENLE:
2014, 25 Haziran Google IO'da, Matias Android için yeni bir stil yönergeleri açıkladı, yeni bir Roboto yazı tipi ve tipografi yönergeleri içeriyor. Bu tabloyu kılavuz olarak alın:
EDIT2:
Bağlantının çürümesi durumunda CSS yazı tipi boyutu çizelgesi eklenmiştir: