Comment générer des Spritefonts pour monogame


14

Je veux juste rendre du texte à l'écran en utilisant:

  • monogame 3.0
  • MS Visual Studio 2010 C # Express

Dans XNA, vous pouviez ajouter des polices au pipeline de contenu assez facilement. Mais cela ne semble pas être le cas en monogame. Le chargement des fichiers TTF à l'aide de Content<SpriteFont>.Load()ne fonctionne pas. Existe-t-il un moyen de générer ou de télécharger des fichiers * .spritefont ou * .xnb contenant les données de police (sans recourir à l'installation de XNA)?


J'ai également eu beaucoup de problèmes à comprendre cela, ce tutoriel m'a beaucoup aidé. youtube.com/watch?v=BwtQn02oy6A

Réponses:


5

Une alternative consiste à utiliser des polices bitmap pré-générées à la place. Voici un tutoriel que j'ai écrit il y a quelque temps sur l'utilisation de l'outil BMFont pour insérer du texte dans votre jeu à l'aide de la bibliothèque MonoGame.Extended .

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


Bien que je ne sois pas satisfait à 100% de cette solution, je suppose que j'irai avec des polices bitmap pour l'instant et j'espère le meilleur dans un avenir proche.
Khôi

Plus récemment, j'ai ajouté BitmapFont à la bibliothèque MonoGame.Extended dylanwilson.net/bmfont-rendering-with-monogame-extended
craftworkgames

@ J2V J'ai mis à jour la réponse pour pointer vers un lien de travail. Ce n'est pas exactement le même que l'ancien, mais il répond toujours à la question, je crois.
craftworkgames

@craftworkgames Merci! Je vais supprimer mon commentaire précédent.
Jaanus Varus du

3

J'ai rencontré le même problème que toi. Heureusement, j'avais un projet XNA existant qui utilisait déjà un fichier .spritefont et générait le fichier XNB. Je viens de le compiler et de copier le XNB dans mon projet MonoGame, et je peux l'utiliser sans aucun problème.

(Avertissement: j'ai essayé de construire le pipeline de contenu XNA pour la version bêta de MonoGame 3.0 conformément aux instructions, et après quelques heures, j'ai abandonné; il n'inclurait pas le projet correctement dans Visual Studio.)


Merci pour le conseil. Bon à savoir que vous pouvez contourner cela comme ça.
Khôi

@ Khôi ce n'est pas parfait, mais il peut au moins vous aider quelque part pendant que vous découvrez comment intégrer le projet de pipeline de contenu.
ashes999

2

Au moins en août de cette année, la génération de spritefonts n'était pas encore prise en charge par MonoGame, mais le pipeline de contenu a été le principal sujet d'attention ces derniers mois, donc je ne serais pas surpris s'il fonctionne actuellement. Bien sûr, vous devez connaître la syntaxe d'un.spritefont fichier qui doit être ajouté à votre dossier de contenu. Pour cela, voir le bas de cet article.

Pour autant que je sache, même en août, le chargement de spritefonts déjà compilés à partir de fichiers XNB est pris en charge. Comme vous ne voulez pas installer XNA pour générer ces fichiers XNB, vous pouvez vérifier le projet XNA Content Compiler sur codeplex.

Voici un exemple de .spritefontfichier afin que vous puissiez voir s'il est actuellement pris en charge

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

Pour l'instant (25.12.2012 - joyeux Noël!), Les spritefonts ne sont pas encore supportés par monogame 3.0. Je viens de l'essayer selon vos instructions.
Khôi

Le compilateur de contenu XNA ne fonctionnera pas non plus pour moi. Puisqu'il semble que vous devez avoir installé XNA pour exécuter le compilateur de contenu. Le compilateur de contenu XNA crée un projet factice en utilisant XNA en arrière-plan pour compiler des fichiers .xnb.
Khôi

@ Khôi Joyeux Noël à toi aussi :). Étrange que le projet nécessite l'installation de XNA, le rend tout à fait inutile pour la plupart des scénarios!
Roy T.

Ce n'est ni étrange ni inutile. MonoGame a besoin de sa propre ligne de contenu pour prendre en charge d'autres plateformes, comme Android. Il s'agit d'une xrutch temporaire - superposition du pipeline de contenu XNA.
ashes999

2

Vous pouvez maintenant le faire sans rien installer de plus. Dans un tout nouveau projet MonoGame, vous devriez avoir un Content.mgcbfichier. Cela devrait faire apparaître l'application MonoGame Pipeline. Vous pouvez cliquer avec le bouton droit sur le Contentnœud dans l'arborescence et ajouter un nouvel élément. Sélectionnez «Description de SpriteFont». Cela sera compilé correctement et vous devriez pouvoir le charger dans votre code.


Je vous remercie! Je cherche depuis des heures et j'ai même essayé d'installer VS2010 et XNA sur WIndows 10 (catastrophe!). Pour quiconque le trouve, l'étape suivante consiste à ouvrir le fichier .spritefont (que vous venez de créer) dans un éditeur de texte et à le modifier de la valeur par défaut «arial» à la police souhaitée.
VenerableAgents

Je ne comprends pas pourquoi plus de tutoriels ne vous donnent pas ces étapes! Je n'en ai pas trouvé après avoir regardé toute la journée. C'est une chose tellement facile à ignorer que le Pipeline fait pour vous.
VenerableAgents


1

La meilleure alternative est de pré-générer la police xnb via XNA d'abord, puis de les utiliser dans votre projet Monogame pour Windows ou vous pouvez faire l'ancienne méthode pour obtenir la fenêtre.Poignée et coordonnées d'écran ScreenToClient puis utilisez le GDI pour dessiner votre texte avec System.Drawing.dll.


0

Je travaille sur cela depuis plusieurs jours maintenant, essayant de résoudre ce problème et finalement j'ai réussi à travailler. Ce sur quoi je travaille est Windows8, VS2012, MonoGame. je dois ajouter que c'est comme "monoGame Windows OpenGL Pjoject"

Permettez-moi de vous expliquer les étapes que j'ai suivies. 1. J'ai installé monGame pour VS2012 2. J'ai installé WindowsPhone SDK8 3. J'ai installé XNA 4.0 pour mon VS2010

Je ne sais pas si toutes ces étapes sont nécessaires ...

Sence vous ne pouvez pas générer un .spritefont dans vs2012 J'ai généré un fichier spriteFont dans mon vs2010 puis ajouté i à mon projet vs2012 .... MAIS cela n'a pas fonctionné. Et ce matin, j'ai vu que l'URL de ce fichier .spritefont était incorrecte. Quand je l'ai ajouté via solution explorer..content -> ajouter un élément existant ... alors l'URL était incorrecte. "C: \ Users \ admin \ Documents \ Visual Studio 2012 \ Projects \ MyGame \ MyGame \ Content" c'est pas où vs2012 où chercher mon fichier * .spritefot il était ici .. -> "C: \ Users \ admin \ Documents \ Visual Studio 2012 \ Projects \ MyGame \ MyGame \ bin \ WindowsGL \ Debug \ Content" J'ai ajouté i et WOW cela a fonctionné. je colle du code ici pour que vous puissiez mieux voir ce que j'ai fait .. dans ma classe de jeu je mets ces variables

    SpriteFont myFont;
    int score;

dans ma méthode de contenu de charge généré automatiquement par VS était

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

dans ma méthode de tirage générée automatiquement par VS était

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

puis ajouté manuellement mon fichier spritefont dans le bon dossier

Ce qui est étrange, c'est que j'ai ajouté des images de cette manière et qu'elles se sont retrouvées dans le bon dossier mais pas dans le * .spritefont, vous devez l'ajouter manuellement dans le dernier dossier pour que je travaille ..

J'espère que cela a du sens pour quelqu'un parce que cela m'a donné le plus gros mal de tête ces derniers jours. J'ai peut-être oublié certaines étapes et tout cela peut être inutile, mais j'espère que je pourrai soulager les maux de tête pour certains

Et j'espère que monoGame sera mis à jour pour résoudre ces problèmes ...


0

J'ai utilisé XNB Builder pour les convertir manuellement en .xnbfichiers. Exécutez simplement l'application, choisissez vos fichiers et il les convertira en fichiers XNB prêts à l'emploi avec MonoGame.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.