Como gerar Spritefonts para monogame


14

Eu só quero renderizar algum texto na tela usando:

  • monogame 3.0
  • MS Visual Studio 2010 C # Express

No XNA, você conseguiu adicionar fontes ao pipeline de conteúdo com bastante facilidade. Mas isso não parece ser o caso no monogame. Carregar arquivos TTF usando Content<SpriteFont>.Load()não funciona. Existe alguma maneira de gerar ou baixar arquivos * .spritefont ou arquivos * .xnb que contêm os dados da fonte (sem recorrer à instalação do XNA)?


Eu também tive muitos problemas para descobrir isso, este tutorial me ajudou bastante. youtube.com/watch?v=BwtQn02oy6A

Respostas:


5

Uma alternativa é usar fontes de bitmap pré-geradas. Aqui está um tutorial que escrevi há algum tempo usando a ferramenta BMFont para inserir texto em seu jogo usando a biblioteca MonoGame.Extended .

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


Embora eu não esteja 100% satisfeito com esta solução, acho que vou usar fontes de bitmap por enquanto e esperar o melhor no futuro próximo.
Khôi

Mais recentemente eu adicionei BitmapFont é para a biblioteca MonoGame.Extended dylanwilson.net/bmfont-rendering-with-monogame-extended
craftworkgames

@ J2V Atualizei a resposta para apontar para um link de trabalho. Não é exatamente o mesmo que o antigo, mas ainda responde à pergunta em que acredito.
Craftworkgames #

@craftworkgames Thanks! Vou remover meu comentário anterior.
Jaanus Varus

3

Encontrei o mesmo problema que você. Felizmente, eu tinha um projeto XNA existente que já usava um arquivo .spritefont e gerava o arquivo XNB. Eu apenas o compilei e copiei o XNB no meu projeto MonoGame e posso usá-lo sem problemas.

(Isenção de responsabilidade: tentei criar o pipeline de conteúdo XNA para o MonoGame 3.0 beta conforme as instruções e, depois de algumas horas, desisti; ele não incluiria o projeto corretamente no Visual Studio.)


Obrigado pela dica. É bom saber que você pode contornar isso dessa maneira.
Khôi

@ Khôi não é perfeito, mas pode pelo menos levá-lo a algum lugar enquanto você descobre como integrar o projeto de pipeline de conteúdo.
ashes999

2

Pelo menos em agosto deste ano, a geração de spritefonts ainda não era suportada pelo MonoGame, no entanto, o pipeline de conteúdo era o principal foco de atenção nos últimos meses, então não ficaria surpreso se ele funcionar atualmente. Obviamente, você precisa conhecer a sintaxe de um .spritefontarquivo que precisa ser adicionado à sua pasta de conteúdo. Para isso, veja o final deste post.

Até onde eu sei, mesmo em agosto, o carregamento de spritefonts já compilados a partir de arquivos XNB é suportado. Como você não deseja instalar o XNA para gerar esses arquivos XNB, convém verificar o XNA Content Compiler Project no codeplex.

Aqui está um .spritefontarquivo de exemplo para que você possa ver se ele é atualmente suportado

<?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 partir de agora (25.12.2012 - feliz natal!), As spritefonts ainda não são suportadas pelo monogame 3.0. Eu apenas tentei de acordo com suas instruções.
Khôi 25/12/12

O XNA Content Compiler também não será executado para mim. Como parece que você precisa ter o XNA instalado para executar o compilador de conteúdo. O XNA Content Compiler cria um projeto fictício usando o XNA em segundo plano para compilar arquivos .xnb.
Khôi 25/12/12

@ Khôi Feliz Natal para você também :). Estranho que o projeto exija XNA instalado, o torna bastante inútil para a maioria dos cenários!
Roy T.

Não é estranho, nem inútil. O MonoGame precisa de seu próprio conteúdo para oferecer suporte a outras plataformas, como o Android. Este é um xrutch temporário - pegar carona no pipeline de conteúdo XNA.
ashes999

2

Agora você pode fazer isso sem instalar nada extra. Em um novo projeto MonoGame, você deve ter um Content.mgcbarquivo. Isso deve abrir o aplicativo MonoGame Pipeline. Você pode clicar com o botão direito do mouse no Contentnó da árvore e adicionar um novo item. Selecione `SpriteFont Description '. Isso será compilado corretamente e você poderá carregá-lo no seu código.


Obrigado! Estou procurando há horas e até tentei instalar o VS2010 e o XNA no Windows 10 (desastre!). Para qualquer outra pessoa que encontrar isso, o próximo passo seria abrir o arquivo .spritefont (que você acabou de criar) em um editor de texto e modificá-lo do 'arial' padrão para a fonte desejada.
VenerableAgents

Não entendo por que mais tutoriais não dão essas etapas! Eu não encontrei nenhum depois de olhar o dia todo. É uma coisa tão fácil de esquecer que o Pipeline faz por você.
VenerableAgents


1

A melhor alternativa é pré-gerar a fonte xnb via XNA primeiro e depois usá-las em seu projeto Monogame for Windows ou você pode fazer o velho truque para obter a Janela. com o System.Drawing.dll.


0

Estou trabalhando nisso há vários dias, tentando consertar isso e, eventualmente, consegui que eu trabalhasse. O que eu estou trabalhando é Windows8, VS2012, MonoGame. devo acrescentar que este é como "monoGame Windows OpenGL Pjoject"

Deixe-me levá-lo através dos passos que tomei. 1. Instalei o monGame para VS2012 2. Instalei o WindowsPhone SDK8 3. Instalei o XNA 4.0 para o meu VS2010

Eu não sei se todos esses passos são nessecery ....

Portanto, você não pode gerar um .spritefont no vs2012 Eu gerei um arquivo spriteFont no meu vs2010 e adicionei i ao meu projeto vs2012 .... MAS não funcionou. E nesta manhã vi que o URL para esse arquivo .spritefont estava errado. Quando o adicionei através do Solution Explorer..content -> adicionar item existente ... o URL estava errado .. "C: \ Usuários \ admin \ Documentos \ Visual Studio 2012 \ Projetos \ MyGame \ MyGame \ Content" não onde vs2012 onde procurava meu arquivo * .spritefot estava aqui ..--> "C: \ Usuários \ admin \ Documentos \ Visual Studio 2012 \ Projetos \ MeuJogo \ MeuJogo \ bin \ WindowsGL \ Debug \ Content" Adicionei i manully, e WOW funcionou. eu colo algum código aqui para que você possa ver melhor o que eu fiz .. dentro da minha classe de jogo eu coloquei essas variáveis

    SpriteFont myFont;
    int score;

no meu método loadcontent gerado automaticamente pelo VS foi

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

no meu método de desenho gerado automaticamente pelo VS foi

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

e então adicionei manualmente meu arquivo spritefont na pasta certa

O estranho é que adicionei fotos dessa maneira e acabamos na pasta correta, mas não no * .spritefont, você deve adicioná-las manualmente na pasta posterior para que eu possa trabalhar ..

Espero que algo disso faça sentido para alguém, porque isso me deu a maior dor de cabeça nos últimos dias. Posso ter esquecido alguns passos e tudo isso pode ser inútil, mas espero poder aliviar as dores de cabeça por alguns por aí

E espero que o monoGame seja atualizado para corrigir esses problemas ...


0

Eu usei o XNB Builder para convertê-los manualmente em .xnbarquivos. Basta executar o aplicativo, escolher seus arquivos e eles serão convertidos em arquivos XNB prontos para uso com o MonoGame.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.