Cara menghasilkan Spritefonts untuk monogame

14

Saya hanya ingin merender beberapa teks ke layar menggunakan:

  • monogame 3.0
  • MS Visual Studio 2010 C # Express

Di XNA, Anda dapat menambahkan font ke pipa konten dengan cukup mudah. Tapi sepertinya ini bukan kasus monogame. Memuat File TTF menggunakan Content<SpriteFont>.Load()tidak berfungsi. Apakah ada cara untuk membuat atau mengunduh file * .spritefont atau * .xnb yang berisi data font (tanpa harus memasang XNA)?

Khôi
sumber
Saya juga punya banyak masalah untuk mencari tahu, tutorial ini banyak membantu saya. youtube.com/watch?v=BwtQn02oy6A

Jawaban:

5

Alternatifnya adalah menggunakan font bitmap yang sudah dibuat sebelumnya. Berikut ini adalah tutorial yang saya tulis beberapa waktu lalu tentang penggunaan alat BMFont untuk memasukkan teks ke dalam game Anda menggunakan pustaka MonoGame.Extended .

http://dylanwilson.net/bmfont-rendering-with-monogame-extended

craftworkgames
sumber
Meskipun saya tidak 100% puas dengan solusi ini, saya kira saya akan menggunakan font bitmap untuk saat ini dan berharap yang terbaik dalam waktu dekat.
Khôi
Baru-baru ini saya menambahkan BitmapFont's ke MonoGame.Extended library dylanwilson.net/bmfont-rendering-with-monogame-extended
craftworkgames
@ J2V Saya memperbarui jawaban untuk menunjuk pada tautan yang berfungsi. Ini tidak persis sama dengan yang lama tapi masih menjawab pertanyaan yang saya percaya.
craftworkgames
@ craftworkgames Terima kasih! Saya akan menghapus komentar saya sebelumnya.
Jaanus Varus
3

Saya mengalami masalah yang sama seperti Anda. Untungnya, saya memiliki proyek XNA yang sudah menggunakan file .spritefont, dan menghasilkan file XNB. Saya baru saja mengkompilasinya, dan menyalin XNB ke proyek MonoGame saya, dan saya dapat menggunakannya tanpa masalah.

(Penafian: Saya mencoba membangun pipa konten XNA untuk MonoGame 3.0 beta sesuai instruksi, dan setelah beberapa jam, saya menyerah; itu tidak akan memasukkan proyek dengan benar di Visual Studio.)

ashes999
sumber
Terima kasih atas tipnya. Senang mengetahui bahwa Anda dapat mengatasinya seperti ini.
Khôi
@ Khôi itu tidak sempurna, tetapi setidaknya bisa membawa Anda ke suatu tempat sementara Anda mencari cara untuk mengintegrasikan proyek pipa konten.
ashes999
2

Setidaknya pada bulan Agustus tahun ini menghasilkan spritefonts belum didukung oleh MonoGame, namun pipa konten adalah fokus utama perhatian beberapa bulan terakhir jadi saya tidak akan terkejut jika itu berfungsi saat ini. Tentu saja Anda perlu mengetahui sintaks a.spritefont file yang perlu ditambahkan ke folder konten Anda. Untuk itu lihat bagian bawah posting ini.

Sejauh yang saya tahu, bahkan sampai Agustus, memuat spritefonts yang sudah dikompilasi dari file XNB didukung. Karena Anda tidak ingin menginstal XNA untuk menghasilkan file XNB ini, Anda mungkin ingin memeriksa Proyek Compiler Konten XNA pada codeplex.

Ini adalah contoh .spritefontfile sehingga Anda dapat melihat apakah itu saat ini didukung

<?xml version="1.0" encoding="utf-8"?>
<!--
This file contains an xml description of a font, and will be read by the XNA
Framework Content Pipeline. Follow the comments to customize the appearance
of the font in your game, and to change the characters which are available to draw
with.
-->
<XnaContent xmlns:Graphics="Microsoft.Xna.Framework.Content.Pipeline.Graphics">
  <Asset Type="Graphics:FontDescription">

    <!--
    Modify this string to change the font that will be imported.
    -->
    <FontName>Arial</FontName>

    <!--
    Size is a float value, measured in points. Modify this value to change
    the size of the font.
    -->
    <Size>10</Size>

    <!--
    Spacing is a float value, measured in pixels. Modify this value to change
    the amount of spacing in between characters.
    -->
    <Spacing>0</Spacing>

    <!--
    UseKerning controls the layout of the font. If this value is true, kerning information
    will be used when placing characters.
    -->
    <UseKerning>true</UseKerning>

    <!--
    Style controls the style of the font. Valid entries are "Regular", "Bold", "Italic",
    and "Bold, Italic", and are case sensitive.
    -->
    <Style>Regular</Style>

    <!--
    If you uncomment this line, the default character will be substituted if you draw
    or measure text that contains characters which were not included in the font.
    -->
    <!-- <DefaultCharacter>*</DefaultCharacter> -->

    <!--
    CharacterRegions control what letters are available in the font. Every
    character from Start to End will be built and made available for drawing. The
    default range is from 32, (ASCII space), to 126, ('~'), covering the basic Latin
    character set. The characters are ordered according to the Unicode standard.
    See the documentation for more information.
    -->
    <CharacterRegions>
      <CharacterRegion>
        <Start>&#32;</Start>
        <End>&#126;</End>
      </CharacterRegion>
    </CharacterRegions>
  </Asset>
</XnaContent>
Roy T.
sumber
Sampai sekarang (25.12.2012 - selamat xmas!), Spritefonts belum didukung oleh monogame 3.0. Saya baru saja mencobanya sesuai dengan instruksi Anda.
Khôi
Compiler Konten XNA juga tidak akan berjalan untuk saya. Karena tampaknya Anda perlu menginstal XNA untuk menjalankan kompiler konten. Compiler Konten XNA membangun proyek dummy menggunakan XNA di latar belakang untuk mengkompilasi file .xnb.
Khôi
@ Khôi Selamat Natal juga untuk Anda :). Aneh bahwa proyek membutuhkan XNA yang diinstal, membuatnya cukup berguna untuk sebagian besar skenario!
Roy T.
Itu tidak aneh, atau tidak berguna. MonoGame membutuhkan pipeline kontennya sendiri untuk mendukung platform lain, seperti Android. Ini adalah xrutch sementara - dukung dari pipa konten XNA.
ashes999
2

Anda sekarang dapat melakukan ini tanpa menginstal tambahan apa pun. Dalam proyek MonoGame baru Anda harus memiliki Content.mgcbfile. Itu akan memunculkan aplikasi MonoGame Pipeline. Anda dapat mengklik kanan pada Contentsimpul di pohon dan menambahkan item baru. Pilih `Deskripsi SpriteFont '. Itu akan dikompilasi dengan benar dan Anda harus dapat memuatnya dalam kode Anda.

Jon Turner
sumber
Terima kasih! Saya sudah mencari berjam-jam dan bahkan mencoba menginstal VS2010 & XNA di WIndows 10 (bencana!). Untuk orang lain yang menemukan ini, langkah selanjutnya adalah membuka file .spritefont (Anda baru saja dibuat) dalam editor teks dan memodifikasinya dari 'arial' default ke font yang Anda inginkan.
Yang Mulia,
Saya tidak mengerti mengapa lebih banyak tutorial tidak memberi Anda langkah-langkah ini! Saya tidak menemukan apa pun setelah mencari sepanjang hari. Sangat mudah untuk mengabaikan bahwa Pipeline cocok untuk Anda.
Yang Mulia
1

Lihat ini teman-teman, saya telah mengkompilasi file * .spritefont saya ke .xnb untuk digunakan di MonoGame, bagi saya, itu satu-satunya cara kerjanya.

Coba lihat, mungkin bisa membantu Anda juga. http://xnacontentcompiler.codeplex.com/

GONeale
sumber
1

Alternatif terbaik adalah pre-generate font xnb melalui XNA terlebih dahulu kemudian gunakan saja di proyek Monogame untuk Windows Anda atau Anda bisa melakukan trik lama untuk mendapatkan Window. Tangani dan koordinat layar ScreenToClient lalu gunakan GDI untuk menggambar teks Anda dengan System.Drawing.dll.

bvrwoo
sumber
0

Saya telah mengerjakan ini selama beberapa hari sekarang, mencoba untuk memperbaikinya dan akhirnya saya berhasil. Apa yang saya kerjakan adalah Windows8, VS2012, MonoGame. saya harus menambahkan bahwa ini adalah "monoGame Windows OpenGL Pjoject"

Biarkan saya membawa Anda melalui langkah-langkah yang telah saya ambil. 1. Saya menginstal monGame untuk VS2012 2. Saya menginstal WindowsPhone SDK8 3. Saya menginstal XNA 4.0 untuk VS2010 saya

Saya tidak tahu apakah semua langkah ini nessecery ....

Karena Anda tidak dapat menghasilkan .spritefont di vs2012 Saya membuat file spriteFont di vs2010 saya dan kemudian menambahkan saya ke proyek vs2012 saya .... TAPI itu tidak berhasil. Dan pagi ini saya melihat bahwa URL untuk file .spritefont itu salah. Ketika saya menambahkannya melalui solusi explorer..content -> tambahkan item yang ada ... maka urlnya salah .. "C: \ Users \ admin \ Documents \ Visual Studio 2012 \ Projects \ MyGame \ MyGame \ Content" ini adalah bukan di mana vs2012 di mana mencari file * .spritefot saya di sini ..--> "C: \ Users \ admin \ Documents \ Visual Studio 2012 \ Projects \ MyGame \ MyGame \ bin \ WindowsGL \ Debug \ Content" Saya menambahkan manully, dan WOW berhasil. saya menempelkan beberapa kode di sini sehingga Anda lebih baik dapat melihat apa yang telah saya lakukan .. di dalam kelas permainan saya, saya meletakkan variabel-variabel ini

    SpriteFont myFont;
    int score;

dalam metode loadcontent saya autogenerated oleh VS adalah

    myFont = Content.Load<SpriteFont>("test");

dalam metode menggambar saya diautogenerasi oleh VS adalah

         spriteBatch.Begin();
     spriteBatch.DrawString(myFont, "Score: " +score, new Vector2(20,10),Color.Red);
        spriteBatch.End();

dan kemudian secara manual menambahkan file spritefont saya di folder kanan

Yang aneh adalah bahwa saya telah menambahkan gambar dengan cara ini dan telah berakhir di folder yang benar tetapi tidak * .spritefont, Anda harus menambahkan secara manual di folder kemudian untuk membuat saya bekerja ..

Saya berharap beberapa dari ini masuk akal bagi seseorang karena ini telah memberi saya sakit kepala terbesar dalam beberapa hari terakhir. Saya mungkin telah lupa beberapa langkah dan semua ini mungkin tidak berguna, tetapi saya berharap bahwa saya dapat meringankan sakit kepala untuk beberapa di luar sana

Dan saya harap monoGame akan diperbarui untuk memperbaiki masalah ini ...

moofoo
sumber
0

Saya telah menggunakan XNB Builder untuk mengubahnya secara manual menjadi .xnbfile. Cukup jalankan aplikasi, pilih file Anda dan itu akan mengubahnya menjadi file XNB yang siap digunakan dengan MonoGame.

Jim Buck
sumber