Desainer UI saya telah membuat PSD photoshop yang bagus dari UI dan semuanya cantik. Masalah terbesar yang saya alami adalah mengubah beberapa font yang lebih elegan yang digunakan menjadi sesuatu yang dapat di-render dalam game. Apakah ada cara untuk mengubah gaya font ini di Photoshop ke jenis bitmap?
Saya harus dapat membuat teks seperti ini di dalam kode saya:
Jawaban:
Oke, Anda harus memaafkan saya karena tidak memberi Anda kode XNA spesifik, karena saya tidak berpengetahuan luas di platform itu, tetapi apa yang akan saya katakan adalah Anda harus bekerja pada mesin game apa pun yang memungkinkan Anda menggambar sprite.
Font bukan satu-satunya masalah Anda, jadi saya akan memberi Anda saran, dan kemudian saya akan menjawab pertanyaan Anda. Dengan dua hal ini, Anda harus dapat membuat hubungan mesra dengan desainer GUI Anda, dan Anda berdua akan dapat dengan sangat senang membuat game.
Hal pertama adalah Anda akan duduk bersama desainer Anda, dan Anda akan memintanya memberi Anda dua set file. Yang pertama adalah satu set file transparan yang membentuk GUI Anda (secara optimal dalam format PSD atau DXT). Untuk setiap tombol, label tetap, latar belakang, batas dan kotak teks, Anda akan mendapatkan satu file (Anda juga dapat melakukan tekstur atlasing, tapi saya sarankan Anda melakukannya setelah Anda merakit GUI Anda, dan kemudian sesuaikan koordinat sumber Anda ketika blitting). Teks non-statis harus ditinggalkan pada saat ini (saya akan mengunjungi lagi nanti).
Hal kedua yang akan Anda dapatkan adalah desain GUI yang sebenarnya, kali ini dalam format Photoshop. Untuk file ini, Anda akan meminta desainer Anda untuk membuat seluruh desain GUI, hanya menggunakan file yang dia berikan sebelumnya.
Dia kemudian akan menempatkan setiap elemen GUI ke dalam lapisan yang terpisah, tanpa menggunakan efek apa pun. Anda akan memberitahunya untuk melakukan pixel ini dengan sempurna, karena lokasi di mana dia akan meletakkan semuanya, adalah di mana semuanya akan benar-benar ada dalam permainan yang diselesaikan.
Setelah Anda mendapatkan itu, untuk setiap lapisan, Anda akan menekan Ctrl-T, dan pada panel Info (F8), Anda akan mencatat koordinat X dan Y untuk setiap elemen. Pastikan unit Anda disetel ke piksel (Preferensi-> Unit & Penguasa-> Unit). Ini adalah posisi yang akan Anda gunakan saat menggambar sprite Anda.
Sekarang, untuk font, seperti yang mungkin Anda ketahui dengan jelas sekarang, Anda tidak akan bisa membuat font Anda terlihat persis seperti yang Anda lihat di Photoshop menggunakan API rendering teks. Anda harus melakukan pra-render mesin terbang Anda, dan kemudian secara sistematis mengumpulkan teks Anda. Ada banyak cara untuk melakukan ini, dan saya akan menyebutkan yang saya gunakan.
Hal pertama adalah membuat semua mesin terbang Anda menjadi satu atau lebih file. Jika Anda hanya peduli dengan bahasa Inggris, satu tekstur untuk semua mesin terbang akan cukup, tetapi jika Anda ingin memiliki rangkaian karakter yang lebih luas, Anda dapat menggunakan beberapa file. Pastikan semua mesin terbang yang Anda inginkan tersedia pada font yang Anda pilih.
Jadi, untuk membuat mesin terbang, Anda dapat menggunakan fasilitas
System.Drawing
untuk mendapatkan metrik font dan menggambar mesin terbang Anda:Dengan ini, Anda telah menggambar mesin terbang putih di atas latar belakang transparan pada sekelompok file PNG, dan membuat file indeks yang memberitahu Anda untuk masing-masing codepoint, di mana file mesin terbang itu berada, lokasi dan dimensinya. Perhatikan bahwa saya juga meletakkan dua piksel tambahan untuk memisahkan setiap mesin terbang (untuk mengakomodasi efek lebih lanjut)
Sekarang, untuk setiap file itu, Anda meletakkannya di photoshop, dan lakukan semua filter yang Anda inginkan. Anda dapat mengatur warna, batas, bayangan, garis besar, dan apa pun yang Anda inginkan. Pastikan saja bahwa efeknya tidak membuat mesin terbang tumpang tindih. Jika demikian, sesuaikan jarak, render ulang, bilas, dan ulangi. Simpan sebagai PNG atau DXT, dan bersama dengan file indeks, letakkan semuanya di proyek Anda.
Menggambar teks harus sangat sederhana. Untuk setiap karakter yang ingin Anda cetak, temukan lokasinya menggunakan indeks, gambarkan, naikkan posisi dan ulangi. Anda juga dapat menyesuaikan jarak, kerning (rumit), jarak vertikal, dan bahkan pewarnaan. Dalam lua:
Dan begitulah. Ulangi untuk setiap font lain (dan ukuran optimal juga)
Sunting : Saya mengubah kode yang akan digunakan
Graphics.MeasureString
alih-alihTextRenderer.MeasureText()
karena mereka berdua menggunakan sistem pengukuran yang berbeda, dan dapat menyebabkan ketidakkonsistenan antara mesin terbang yang diukur dan yang ditarik, terutama dengan mesin terbang yang menggantung ditemukan di beberapa font. Informasi lebih lanjut di sini .sumber
Seperti kata orang lain, di XNA, spritefont melakukan pekerjaan berat untuk Anda. di situs pembuat klub ada eksportir font bitmap yang mengekspor gambar font gaya XNA. ( http://xbox.create.msdn.com/en-US/education/catalog/utility/bitmap_font_maker ) Kemudian, Anda dapat membukanya di photoshop atau apa pun dan membuatnya terlihat cantik. Dari sana, Anda menambahkan tekstur ke proyek konten Anda, dan dalam jenis konten, pilih tekstur font sprite. Dalam kode Anda, Anda memuatnya seperti font sprite normal
(Contoh: http://www.youtube.com/watch?v=SynGWrWYUQI )
sumber
Solusinya cukup sederhana dan digunakan oleh sejumlah besar game. Yang harus Anda lakukan adalah memperlakukan font Anda seolah-olah itu adalah sprite.
Mintalah desainer Anda menggambar seluruh jajaran angka dan huruf yang ingin Anda gunakan dalam gim Anda. Kemudian render gambar tersebut ke berbagai gambar statis ukuran (.png, .bmp, format apa pun yang Anda gunakan). Anda akan memiliki sesuatu seperti ini:
Sekarang yang harus Anda lakukan adalah membuat setiap huruf dari "font sheet" Anda seolah-olah itu adalah sprite ke layar. Jelas membantu membangun kelas pembantu untuk menerjemahkan antara string dan sprite.
Implementasi saya lebih kompleks, tetapi praktis. Lembar font dibangun seperti gambar di atas dengan banyak font semua dalam satu file .png. Saya punya
.ini
file yang memetakan setiap huruf font ke posisi di lembar, bersama dengan lebar dan tinggi. Ini memungkinkan perancang saya (dan saya sendiri) membuat font keren tanpa harus menyentuh kode apa pun. Saat menggambar string ke layar, saya memiliki metode yang mencari font danchar
dari .ini file untuk mendapatkan posisi dan batas-batas huruf dari lembar font, maka saya hanya menggambarTexture2D
denganSpriteBatch.Draw()
menggunakan sumberRectangle
huruf dalam pertanyaan.sumber
UI adalah subjek yang luas dan kompleks. Render font adalah bagian yang sulit. Saya menyarankan Anda untuk menggunakan perpustakaan yang sudah ada yang memungkinkan Anda untuk menampilkan konten Flash atau HTML dalam game, alih-alih mengulang semuanya sendiri.
Awesomium terlihat menjanjikan dan harus bekerja dengan XNA , jadi Anda bisa mencobanya. Ini gratis untuk digunakan untuk permainan non-komersial, atau jika Anda tidak menghasilkan banyak uang:
sumber
Jika Anda mencari efek yang lebih bagus daripada importir .spritefont biasa, Anda dapat mencoba mencari "generator font bitmap".
Secara pribadi saya lebih suka yang ini: http://www.ironstarmedia.co.uk/2010/01/free-game-dev-utility-fancy-bitmap-font-generator/
Beberapa ide lain:
sumber
XNA
melakukan semua kerja keras untuk Anda. DenganSpritefont
Anda dapat dengan mudah mengkonversi file font pada mesin Anda menjadi jenis sprite sheet yang Anda tanyakan dengan mendefinisikan file XML.Setelah Anda menambahkan file XML ke proyek Konten Anda memuatnya dengan
ContentManager
:Berikut adalah contoh file .spritefont dari proyek konten saya:
sumber
Saya tidak yakin karena saya tidak pernah menggunakannya tetapi orang menyarankan saya untuk menggunakan Glyph Designer. Berikut ini adalah video tutorialnya:
http://vimeo.com/32777161
Di sini ada diskusi tentang itu menyebutkan photoshop.
Ada orang yang menggunakan juga editor font Hiero .
Di situs web ini ada daftar editor font lain yang mungkin ingin Anda lihat.
Beritahu saya yang mana yang paling cocok untuk Anda :)
sumber