Bagaimana cara mendapatkan teks kecil yang indah di XNA tanpa menggunakan perpustakaan eksternal?

13

Dalam XNA, teknologi spritefont mengerikan. Nuclex melakukan pekerjaan jauh lebih baik, tetapi saya tidak ingin memiliki referensi eksternal, dan saya hampir selesai dengan permainan saya.

Saat menggunakan font seperti Sansation atau Quicksand, itu terlihat mengerikan dalam ukuran font yang lebih kecil. Sangat buruk!

Apakah ada solusi yang diketahui untuk ini? Saya mencoba mengatur ukuran font menjadi sangat tinggi, dan kemudian menurunkannya di spritebatch tanpa hasil.

Mathias Lykkegaard Lorenzen
sumber
Saya menggunakan SpriteFont untuk membuat font saya untuk XNA, Anda memiliki banyak fleksibilitas. Saya juga memastikan bahwa posisi font adalah integer sehingga tidak ada antialiasing yang jahat terjadi, tetapi ini mungkin bukan solusi yang bagus. Anda dapat mencoba memfilter titik dalam panggilan spritebatch teks Anda juga.
Jonathan Connell
Jangan lupa untuk menguji font kecil Anda di berbagai perangkat nyata dan orang-orang. Jika itu adalah judul 360 dan dengan demikian menargetkan TV, ukuran semua elemen visual cenderung harus sedikit lebih besar daripada di layar PC.
Lars Viklund
Saya sedang melakukan permainan PC, dan ukuran font diatur ke seluruh nomor.
Mathias Lykkegaard Lorenzen
1
Jangan skala teks, buat spritefont untuk setiap ukuran yang Anda butuhkan.
Wouter
1
Beberapa aturan lagi untuk Anda di sini. Jepit vektor posisi ke bilangan bulat sebelum rendering, jika tidak, pengambilan sampel akan membuat teks output Anda terlihat sampah . Mungkin perlu mengubah sampler tekstur ke Point / Nearest Neighbor sebelum merender teks. Terutama jika font Anda pixelated :)
Cubed2D

Jawaban:

11

XNA memungkinkan Anda mengimpor tekstur sebagai spritefont . Anda mungkin bisa mendapatkan petunjuk yang lebih baik dan anti-aliasing di font Anda jika Anda meletakkan setiap karakter secara manual dalam program pengeditan gambar yang baik, daripada mengandalkan lembar sprite yang dihasilkan XNA.

Tim R.
sumber
13

Prosesor font sprite XNA menggunakan kompresi DXT3 yang tidak bekerja dengan baik dengan alfa prapultiplied baru di XNA 4.0. Oleh karena itu, tampilan teks terlihat pucat.

Prosesor font sprite Nuclex menghasilkan data yang persis sama, kecuali bahwa internal Texture2Dyang menyimpan data bitmap font tidak dikompresi - sehingga tidak memiliki masalah kualitas.

Karena data dari prosesor Nuclex berada dalam format yang sama, SpriteFontpembaca XNA dapat membacanya, dan Anda tidak perlu menyertakan pustaka Nuclex untuk didistribusikan dengan gim Anda.

(Ini juga memungkinkan Anda untuk menggunakan format XML yang sama dengan definisi font sprite asli XNA.)

Yang sedang berkata: tidak ada yang salah dengan menggabungkan perpustakaan eksternal dengan game Anda. Ini tidak seperti mereka terinstal di sistem Anda atau apa pun. (Anda bahkan bisa pergi sejauh menggabungkan dua majelis).

Dan hal yang sama berlaku untuk kode (jika Anda khawatir tentang kontrol versi, misalnya). Anda bisa memasukkan Nuclex.Fonts.Content.TrueTypeImporter.dllkode sumber Anda. Ini sebenarnya bukan masalah besar.

Andrew Russell
sumber
9

Anda dapat menggunakan font piksel :

pf varian tempesta

Ketika Anda menggunakan font piksel pada ukuran font yang dirancang untuk (atau kelipatannya secara keseluruhan, misalnya 2x, 3x, 4x) Anda dijamin teks pixel-perfect yang tidak memerlukan anti-aliasing. Ini berarti Anda tidak pernah harus berurusan dengan anti-aliasing yang mengerikan yang membuat font sprite XNA begitu buruk dan Nuclex jauh lebih baik. ( Artikel ini membahas masalah itu dan membandingkannya)

doppelgreener
sumber