Come generare Spritefonts per monogame


14

Voglio solo rendere del testo sullo schermo usando:

  • monogame 3.0
  • MS Visual Studio 2010 C # Express

In XNA, sei stato in grado di aggiungere caratteri alla pipeline di contenuti abbastanza facilmente. Ma questo non sembra essere il caso del monogame. Il caricamento dei file TTF mediante Content<SpriteFont>.Load()non funziona. Esiste un modo per generare o scaricare file * .spritefont o * .xnb contenenti i dati dei caratteri (senza ricorrere all'installazione di XNA)?


Ho anche avuto molti problemi a capirlo, questo tutorial mi ha aiutato molto. youtube.com/watch?v=BwtQn02oy6A

Risposte:


5

Un'alternativa è utilizzare invece caratteri bitmap pre-generati. Ecco un tutorial che ho scritto qualche tempo fa usando lo strumento BMFont per ottenere testo nel tuo gioco usando la libreria MonoGame.Extended .

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


Anche se non sono soddisfatto al 100% con questa soluzione, suppongo che andrò con i caratteri bitmap per ora e spero per il meglio nel prossimo futuro.
Khôi,

Più recentemente ho aggiunto BitmapFont's alla libreria MonoGame.Extended dylanwilson.net/bmfont-rendering-with-monogame-extended
craftworkgames

@ J2V Ho aggiornato la risposta per indicare un collegamento funzionante. Non è esattamente lo stesso di quello vecchio, ma risponde ancora alla domanda in cui credo.
craftworkgames

@craftworkgames Grazie! Ho intenzione di rimuovere il mio commento precedente.
Jaanus Varus,

3

Ho riscontrato lo stesso problema con te. Per fortuna, avevo un progetto XNA esistente che già utilizzava un file .spritefont e generava il file XNB. L'ho appena compilato e copiato l'XNB nel mio progetto MonoGame e posso usarlo senza problemi.

(Dichiarazione di non responsabilità: ho provato a costruire la pipeline di contenuti XNA per MonoGame 3.0 beta come da istruzioni, e dopo alcune ore ho rinunciato; non avrebbe incluso correttamente il progetto in Visual Studio.)


Grazie per il suggerimento. Buono a sapersi che puoi aggirare in questo modo.
Khôi,

@ Khôi non è perfetto, ma può almeno portarti da qualche parte mentre scopri come integrare il progetto della pipeline di contenuti.
ashes999,

2

Almeno nell'agosto di quest'anno la generazione di spritefonts non era ancora supportata da MonoGame, tuttavia la pipeline di contenuti è stata al centro dell'attenzione negli ultimi mesi, quindi non sarei sorpreso se al momento funziona. Naturalmente è necessario conoscere la sintassi di un .spritefontfile che deve essere aggiunto alla cartella del contenuto. Per questo vedi il fondo di questo post.

Per quanto ne so, fino ad agosto, è supportato il caricamento di spritefonts già compilati da file XNB. Poiché non si desidera installare XNA per generare questi file XNB, è possibile che si desideri controllare il progetto del compilatore di contenuti XNA su codeplex.

Ecco un .spritefontfile di esempio in modo da poter vedere se è attualmente supportato

<?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>

A partire da ora (25.12.2012 - buon natale!), Gli spritefonts non sono ancora supportati da monogame 3.0. L'ho appena provato secondo le tue istruzioni.
Khôi,

Il compilatore di contenuti XNA non funzionerà neanche per me. Dal momento che sembra che sia necessario avere XNA installato per eseguire il compilatore di contenuti. Il compilatore di contenuti XNA crea un progetto fittizio utilizzando XNA in background per compilare file .xnb.
Khôi,

@ Khôi Buon Natale anche a te :). Strano che il progetto richieda l'installazione di XNA, lo rende abbastanza inutile per la maggior parte degli scenari!
Roy T.

Non è strano, né inutile. MonoGame ha bisogno di una propria pipeline di contenuti per supportare altre piattaforme, come Android. Questo è un xrutch temporaneo - a due vie dalla pipeline di contenuti XNA.
ashes999,

2

Ora puoi farlo senza installare nulla in più. In un nuovissimo progetto MonoGame dovresti avere un Content.mgcbfile. Ciò dovrebbe far apparire l'app Pipeline MonoGame. È possibile fare clic con il pulsante destro del mouse sul Contentnodo nella struttura e aggiungere un nuovo elemento. Seleziona `SpriteFont Description '. Verrà compilato correttamente e dovresti essere in grado di caricarlo nel tuo codice.


Grazie! Ho cercato per ore e ho persino provato a installare VS2010 e XNA su Windows 10 (disastro!). Per chiunque lo trovi, il passo successivo sarebbe aprire il file .spritefont (appena creato) in un editor di testo e modificarlo dall'arial predefinito al carattere desiderato.
VenerableAgents

Non capisco perché altri tutorial non ti diano questi passaggi! Non ho trovato nessuno dopo aver cercato tutto il giorno. È una cosa così facile da trascurare che la pipeline fa per te.
VenerableAgents


1

La migliore alternativa è pre-generare il font xnb tramite XNA prima di usarli nel tuo progetto Monogame per Windows oppure puoi fare il vecchio trucco di ottenere Window.Manle e le coordinate dello schermo ScreenToClient quindi utilizzare GDI per disegnare il testo con System.Drawing.dll.


0

Ci sto lavorando da diversi giorni ormai, provando a risolvere questo problema e alla fine mi sono messo al lavoro. Quello su cui sto lavorando è Windows8, VS2012, MonoGame. dovrei aggiungere che questo è come "jojo Windows OpenGL Pjoject "

Lascia che ti accompagni attraverso i passi che ho fatto. 1. Ho installato monGame per VS2012 2. Ho installato WindowsPhone SDK8 3. Ho installato XNA 4.0 per VS2010

Non so se tutti questi passaggi sono nessecery ....

Quindi non puoi generare un .spritefont in vs2012 Ho generato un file spriteFont nel mio vs2010 e poi ho aggiunto i al mio progetto vs2012 .... MA non ha funzionato. E questa mattina ho visto che l'URL per quel file .spritefont era sbagliato. Quando l'ho aggiunto tramite Esplora soluzioni ... contenuto -> aggiungi elemento esistente ... quindi l'URL era sbagliato .. "C: \ Users \ admin \ Documents \ Visual Studio 2012 \ Projects \ MyGame \ MyGame \ Content" questo è non dove vs2012 dove cercavo il mio file * .spritefot era qui ..--> "C: \ Users \ admin \ Documents \ Visual Studio 2012 \ Projects \ MyGame \ MyGame \ bin \ WindowsGL \ Debug \ Content" Ho aggiunto i Manully, e WOW ha funzionato. incollo un po 'di codice qui in modo da poter vedere cosa ho fatto .. nella mia classe di gioco ho inserito queste variabili

    SpriteFont myFont;
    int score;

nel mio metodo loadcontent autogenerato da VS era

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

nel mio metodo di disegno è stato generato automaticamente da VS

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

e poi ho aggiunto manualmente il mio file spritefont nella cartella giusta

La cosa strana è che ho aggiunto le immagini in questo modo e sono finito nella cartella giusta ma non nel * .spritefont, devi aggiungerlo manualmente nella cartella successiva per farmi lavorare ..

Spero che questo abbia senso per qualcuno perché questo mi ha dato il più grande mal di testa in questi ultimi giorni. Potrei aver dimenticato alcuni passaggi e tutto ciò potrebbe essere inutile, ma spero di poter alleviare il mal di testa per alcuni là fuori

E spero che monoGame verrà aggiornato per risolvere questi problemi ...


0

Ho usato XNB Builder per convertirli manualmente in .xnbfile. Basta eseguire l'app, scegliere i file e li convertirà in file XNB che sono pronti per l'uso con MonoGame.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.