So generieren Sie Spritefonts für Monospiele


14

Ich möchte nur Text auf dem Bildschirm rendern, indem ich Folgendes verwende:

  • Monogame 3.0
  • MS Visual Studio 2010 C # Express

In XNA konnten Sie der Inhaltspipeline ganz einfach Schriftarten hinzufügen. Dies scheint jedoch im Monogame nicht der Fall zu sein. Laden von TTF-Dateien mitContent<SpriteFont>.Load() funktioniert nicht. Gibt es eine Möglichkeit, * .spritefont-Dateien oder * .xnb-Dateien mit den Schriftartdaten zu generieren oder herunterzuladen (ohne XNA installieren zu müssen)?


Ich hatte auch viele Probleme, das herauszufinden. Dieses Tutorial hat mir sehr geholfen. youtube.com/watch?v=BwtQn02oy6A

Antworten:


5

Eine Alternative besteht darin, stattdessen vorgenerierte Bitmap-Schriftarten zu verwenden. Hier ist ein Tutorial, das ich vor einiger Zeit über die Verwendung des BMFont-Tools geschrieben habe, um mit MonoGame.Extended Text in Ihr Spiel zu bringen Bibliothek .

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


Obwohl ich mit dieser Lösung nicht 100% ig zufrieden bin, werde ich wohl erstmal Bitmap-Schriften verwenden und hoffe auf das Beste in naher Zukunft.
Khôi

I In jüngerer Zeit hinzugefügt BitmapFont ist auf die MonoGame.Extended Bibliothek dylanwilson.net/bmfont-rendering-with-monogame-extended
craftworkgames

@ J2V Ich habe die Antwort aktualisiert, um auf einen funktionierenden Link zu verweisen. Es ist nicht genau dasselbe wie das alte, aber es beantwortet immer noch die Frage, die ich glaube.
Bastelspiele

@craftworkgames Danke! Ich werde meinen vorherigen Kommentar entfernen.
Jaanus Varus

3

Ich bin auf dasselbe Problem gestoßen wie du. Zum Glück hatte ich ein vorhandenes XNA-Projekt, das bereits eine .spritefont-Datei verwendet und die XNB-Datei generiert hat. Ich habe es gerade kompiliert und das XNB in ​​mein MonoGame-Projekt kopiert, und ich kann es ohne Probleme verwenden.

(Haftungsausschluss: Ich habe versucht, die XNA-Inhaltspipeline für MonoGame 3.0 Beta gemäß den Anweisungen zu erstellen, und nach ein paar Stunden habe ich aufgegeben. Das Projekt wurde in Visual Studio nicht ordnungsgemäß aufgenommen.)


Danke für den Tipp. Gut zu wissen, dass Sie so umgehen können.
Khôi

@ Khôi es ist nicht perfekt, aber es kann dich zumindest irgendwohin bringen, während du herausfindest, wie du das Content-Pipeline-Projekt integrieren kannst.
Asche999

2

Zumindest im August dieses Jahres wurde das Generieren von Spritefonts noch nicht von MonoGame unterstützt, jedoch stand in den letzten Monaten die Content-Pipeline im Mittelpunkt des Interesses, sodass ich mich nicht wundern würde, wenn es derzeit funktioniert. Natürlich müssen Sie die Syntax von a kennen.spritefont Datei kennen, die Ihrem Inhaltsordner hinzugefügt werden muss. Siehe dazu den unteren Rand dieses Beitrags.

Soweit ich weiß, wird bereits im August das Laden bereits kompilierter Spritefonts aus XNB-Dateien unterstützt. Da Sie XNA nicht installieren möchten, um diese XNB-Dateien zu generieren, sollten Sie das XNA Content Compiler-Projekt auf Codeplex überprüfen.

Hier ist eine Beispieldatei .spritefont, damit Sie sehen können, ob sie derzeit unterstützt wird

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

Ab sofort (25.12.2012 - Frohe Weihnachten!) Werden Spritefonts von Monogame 3.0 noch nicht unterstützt. Ich habe es nur nach deinen Anweisungen ausprobiert.
Khôi

Der XNA Content Compiler wird auch für mich nicht ausgeführt. Da es scheint, müssen Sie XNA installiert haben, um den Inhalts-Compiler auszuführen. Der XNA Content Compiler erstellt ein Dummy-Projekt mit XNA im Hintergrund, um .xnb-Dateien zu kompilieren.
Khôi

@ Khôi Frohe Weihnachten euch auch :). Seltsamerweise erfordert das Projekt die Installation von XNA, was es für die meisten Szenarien ziemlich nutzlos macht!
Roy T.

Es ist weder seltsam noch nutzlos. MonoGame benötigt eine eigene Content-Pipline, um andere Plattformen wie Android zu unterstützen. Dies ist ein temporäres Xrutch - Piggyback aus der XNA - Content - Pipeline.
Asche999

2

Sie können dies jetzt ohne zusätzliche Installation tun. In einem brandneuen MonoGame-Projekt sollten Sie eine Content.mgcbDatei haben. Daraufhin sollte die MonoGame Pipeline-App angezeigt werden. Sie können mit der rechten Maustaste auf den ContentKnoten in der Baumstruktur klicken und ein neues Element hinzufügen. Wählen Sie "SpriteFont Description". Das wird korrekt kompiliert und Sie sollten in der Lage sein, es in Ihren Code zu laden.


Vielen Dank! Ich habe stundenlang gesucht und sogar versucht, VS2010 & XNA unter Windows 10 zu installieren (Katastrophe!). Für alle anderen, die dies finden, besteht der nächste Schritt darin, die soeben erstellte .spritefont-Datei in einem Texteditor zu öffnen und sie vom Standard-Arial in die gewünschte Schriftart zu ändern.
VenerableAgents

Ich verstehe nicht, warum mehr Tutorials Ihnen diese Schritte nicht geben! Ich habe keine gefunden, nachdem ich den ganzen Tag gesucht hatte. Es ist so leicht zu übersehen, dass die Pipeline dies für Sie erledigt.
VenerableAgents

1

Ich habe meine * .spritefont-Dateien für die Verwendung in MonoGame in .xnb kompiliert. Für mich ist dies die einzige Möglichkeit, wie es funktioniert hat.

Probieren Sie es aus, könnte Ihnen auch helfen. http://xnacontentcompiler.codeplex.com/


1

Die beste Alternative ist, die Schriftart xnb über XNA vorab zu generieren und sie dann in Ihrem Monogame für Windows-Projekt zu verwenden. Sie können auch den alten Trick ausführen, indem Sie Window.Handle und die Bildschirmkoordinaten ScreenToClient abrufen und dann den GDI zum Zeichnen Ihres Texts verwenden mit der System.Drawing.dll.


0

Ich arbeite jetzt seit einigen Tagen daran und versuche, dies zu beheben, und irgendwann habe ich mich an die Arbeit gemacht. Was ich arbeite, ist Windows8, VS2012, MonoGame. Ich sollte hinzufügen, dass dies als "MonoGame Windows OpenGL Pjoject" ist

Lassen Sie sich von mir durch die Schritte führen, die ich unternommen habe. 1. Ich habe monGame für VS2012 installiert. 2. Ich habe WindowsPhone SDK8 installiert. 3. Ich habe XNA 4.0 für mein VS2010 installiert

Ich weiß nicht, ob all diese Schritte notwendig sind ...

Da Sie in vs2012 keine .spritefont-Datei generieren können, habe ich in vs2010 eine spriteFont-Datei generiert und dann i zu meinem vs2012-Projekt hinzugefügt .... ABER es hat nicht funktioniert. Und heute Morgen habe ich gesehen, dass die URL für diese .spritefont-Datei falsch war. Wenn ich es über den Solution Explorer hinzugefügt habe ... Inhalt -> Vorhandenes Element hinzufügen ... dann war die URL falsch. "C: \ Users \ admin \ Documents \ Visual Studio 2012 \ Projects \ MyGame \ MyGame \ Content" ist dies nicht wo vs2012 wo nach meiner * .spritefot-Datei gesucht wurde hier ..--> "C: \ Benutzer \ admin \ Dokumente \ Visual Studio 2012 \ Projekte \ MyGame \ MyGame \ bin \ WindowsGL \ Debug \ Content" manully, und wow, es hat funktioniert. Ich füge hier etwas Code ein, damit du besser sehen kannst, was ich getan habe. In meiner Spielklasse setze ich diese Variablen

    SpriteFont myFont;
    int score;

In meiner Loadcontent-Methode wurde von VS autogeneriert

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

In meiner Draw-Methode wurde von VS autogeneriert

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

und dann manuell meine Spritefont-Datei in den richtigen Ordner hinzugefügt

Das Seltsame ist, dass ich Bilder auf diese Weise hinzugefügt habe und sie im richtigen Ordner, aber nicht im * .spritefont gelandet sind. Sie müssen sie im späteren Ordner manuell hinzufügen, damit ich arbeiten kann.

Ich hoffe, dass einiges davon für jemanden Sinn ergibt, da mir dies in den letzten Tagen die größten Kopfschmerzen bereitet hat. Ich habe vielleicht einige Schritte vergessen und all dies mag nutzlos sein, aber ich hoffe, dass ich die Kopfschmerzen für einige da draußen lindern kann

Und ich hoffe, dass monoGame aktualisiert wird, um diese Probleme zu beheben ...


0

Ich habe XNB Builder verwendet , um sie manuell in .xnbDateien zu konvertieren . Starten Sie einfach die App, wählen Sie Ihre Dateien aus und sie werden in XNB-Dateien konvertiert, die mit MonoGame verwendet werden können.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.