Как генерировать Spritefonts для моногейма


14

Я просто хочу визуализировать некоторый текст на экране, используя:

  • моногейм 3.0
  • MS Visual Studio 2010 C # Экспресс

В XNA вы могли легко добавлять шрифты в конвейер контента. Но в моногаме этого не происходит. Загрузка файлов TTF с помощью Content<SpriteFont>.Load()не работает. Есть ли способ сгенерировать или загрузить файлы * .spritefont или * .xnb, содержащие данные о шрифтах (без установки XNA)?


У меня также было много проблем, чтобы понять это, этот урок очень помог мне. youtube.com/watch?v=BwtQn02oy6A

Ответы:


5

Альтернативой является использование предварительно сгенерированных растровых шрифтов. Вот учебник, который я недавно написал об использовании инструмента BMFont для ввода текста в вашу игру с помощью MonoGame.Extended библиотеки .

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


Хотя я не удовлетворен этим решением на 100%, я полагаю, что пока что поеду с растровыми шрифтами и надеюсь на лучшее в ближайшем будущем.
Khôi

Совсем недавно я добавил BitmapFont, чтобы библиотека MonoGame.Extended dylanwilson.net/bmfont-rendering-with-monogame-extended
craftworkgames

@ J2V Я обновил ответ, чтобы указать на рабочую ссылку. Это не совсем то же самое, что и старое, но оно все еще отвечает на вопрос, которому я верю.
craftworkgames

@craftworkgames Спасибо! Я собираюсь удалить свой предыдущий комментарий.
Яан Варус

3

Я столкнулся с той же проблемой, что и вы. К счастью, у меня был существующий проект XNA, который уже использовал файл .spritefont, и сгенерировал файл XNB. Я просто скомпилировал его и скопировал XNB в мой проект MonoGame, и я могу использовать его без проблем.

(Отказ от ответственности: я попытался построить конвейер содержимого XNA для бета-версии MonoGame 3.0 в соответствии с инструкциями, и через несколько часов я сдался; он не включит проект должным образом в Visual Studio.)


Спасибо за совет. Приятно знать, что вы можете обойти это так.
Khôi

@ Khôi, он не идеален, но, по крайней мере, может куда-то вас привести, пока вы не поймете, как интегрировать проект конвейера контента.
ashes999

2

По крайней мере, в августе этого года генерация spritefonts еще не поддерживалась MonoGame, однако конвейер контента был в центре внимания в последние несколько месяцев, поэтому я не удивлюсь, если он работает в настоящее время. Конечно, вам нужно знать синтаксис .spritefontфайла, который необходимо добавить в папку с содержимым. Для этого смотрите в нижней части этого поста.

Насколько я могу судить, даже в августе поддерживается загрузка уже скомпилированных spritefonts из файлов XNB. Поскольку вы не хотите устанавливать XNA для генерации этих файлов XNB, вы можете проверить проект компилятора содержимого XNA в codeplex.

Вот пример .spritefontфайла, чтобы вы могли увидеть, если он в настоящее время поддерживается

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

На данный момент (25.12.2012 - веселого Рождества!) Спрайт-шрифты пока не поддерживаются в monogame 3.0. Я только что попробовал в соответствии с вашими инструкциями.
Khôi

Компилятор содержимого XNA для меня тоже не работает. Поскольку, кажется, вам нужно установить XNA для запуска компилятора контента. Компилятор содержимого XNA создает фиктивный проект с использованием XNA в фоновом режиме для компиляции файлов .xnb.
Khôi

@ Хой Счастливого Рождества тебе тоже :). Странно, что для проекта требуется XNA, что делает его совершенно бесполезным для большинства сценариев!
Рой Т.

Это не странно и не бесполезно. MonoGame нужна своя собственная линия контента для поддержки других платформ, таких как Android. Это временный xrutch-контрейлер с конвейером контента XNA.
ashes999

2

Теперь вы можете сделать это, не устанавливая ничего лишнего. В новом проекте MonoGame у вас должен быть Content.mgcbфайл. Это должно вызвать приложение MonoGame Pipeline. Вы можете щелкнуть правой кнопкой мыши Contentузел в дереве и добавить новый элемент. Выберите «Описание SpriteFont». Это будет правильно скомпилировано, и вы сможете загрузить его в свой код.


Спасибо! Я искал часы и даже пытался установить VS2010 & XNA в Windows 10 (катастрофа!). Для любого, кто найдет это, следующим шагом будет открытие файла .spritefont (который вы только что создали) в текстовом редакторе и изменение его из стандартного «arial» на нужный шрифт.
Преподобные

Я не понимаю, почему другие учебники не дают вам таких шагов! Я не нашел ни одного после просмотра весь день. Это так легко упустить из виду, что Pipeline делает для вас.
Преподобные

1

Проверьте это, ребята, я собираю свои * .spritefont файлы в .xnb для использования в MonoGame, для меня это единственный способ, которым это работает.

Проверьте это, может помочь вам тоже. http://xnacontentcompiler.codeplex.com/


1

Лучшая альтернатива - предварительно сгенерировать шрифт xnb с помощью XNA, а затем просто использовать его в своем проекте Monogame для Windows, или вы можете сделать старый трюк с получением Window.Handle и экранных координат ScreenToClient, а затем использовать GDI для рисования текста. с System.Drawing.dll.


0

Я работал над этим уже несколько дней, пытаясь это исправить, и в итоге я заставил себя работать. Я работаю над Windows8, VS2012, MonoGame. я должен добавить, что это как "моноигра Windows OpenGL Pjoject"

Позвольте мне пройти через шаги, которые я предпринял. 1. Я установил monGame для VS2012 2. Я установил WindowsPhone SDK8 3. Я установил XNA 4.0 для своего VS2010

Я не знаю, все ли эти шаги несущественны ....

Так как вы не можете сгенерировать .spritefont в vs2012, я сгенерировал файл spriteFont в своем vs2010, а затем добавил его в свой проект vs2012 .... НО это не сработало. И этим утром я увидел, что URL для этого файла .spritefont был неправильным. Когда я добавил его через обозреватель решений..content -> добавить существующий элемент ..., тогда URL-адрес был неправильным .. "C: \ Users \ admin \ Documents \ Visual Studio 2012 \ Projects \ MyGame \ MyGame \ Content" это не там, где vs2012, где в поисках моего * .spritefot файла он был здесь ..--> "C: \ Users \ admin \ Documents \ Visual Studio 2012 \ Projects \ MyGame \ MyGame \ bin \ WindowsGL \ Debug \ Content" я добавил Вручную, и ВАУ это сработало. я вставляю здесь некоторый код, чтобы вы лучше могли видеть, что я сделал .. внутри своего игрового класса я поместил эти переменные

    SpriteFont myFont;
    int score;

в моем методе loadcontent, автоматически сгенерированном VS

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

в моем методе розыгрыша, автоматически создан VS

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

а затем вручную добавили мой файл spritefont в нужную папку

Странно то, что я добавил картинки таким образом, и они оказались в нужной папке, но не в * .spritefont, вы должны вручную добавить их в более позднюю папку, чтобы заставить меня работать ..

Я надеюсь, что кое-что из этого имеет смысл для кого-то, потому что это дало мне самую большую головную боль в эти последние дни. Возможно, я забыл некоторые шаги, и все это может быть бесполезным, но я надеюсь, что я могу ослабить головные боли для некоторых там

И я надеюсь, что monoGame будет обновлен, чтобы исправить эти проблемы ...


0

Я использовал XNB Builder, чтобы вручную преобразовать их в .xnbфайлы. Просто запустите приложение, выберите ваши файлы, и оно преобразует их в файлы XNB, которые готовы к использованию с MonoGame.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.