Jak wygenerować Spritefonts do monogame

14

Chcę tylko wyrenderować tekst na ekranie za pomocą:

  • monogame 3.0
  • MS Visual Studio 2010 C # Express

W XNA można dość łatwo dodawać czcionki do potoku zawartości. Ale wydaje się, że tak nie jest w monogame. Ładowanie plików TTF przy użyciu Content<SpriteFont>.Load()nie działa. Czy jest jakiś sposób na wygenerowanie lub pobranie plików * .spritefont lub plików * .xnb zawierających dane czcionki (bez konieczności instalowania XNA)?

Khôi
źródło
Miałem też wiele problemów z rozgryzieniem tego, ten samouczek bardzo mi pomógł. youtube.com/watch?v=BwtQn02oy6A

Odpowiedzi:

5

Alternatywą jest użycie wstępnie wygenerowanych czcionek bitmapowych. Oto samouczek, który napisałem jakiś czas temu na temat używania narzędzia BMFont do wprowadzania tekstu do gry za pomocą biblioteki MonoGame.Extended .

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

gry rzemieślnicze
źródło
Chociaż nie jestem w 100% zadowolony z tego rozwiązania, myślę, że na razie skorzystam z czcionek bitmapowych i mam nadzieję na najlepsze w najbliższej przyszłości.
Khôi,
Niedawno dodałem BitmapFont do biblioteki MonoGame.Extended dylanwilson.net/bmfont-rendering-with-monogame-extended
craftworkgames
@ J2V Zaktualizowałem odpowiedź, aby wskazywała działające łącze. Nie jest dokładnie taki sam jak stary, ale nadal odpowiada na pytanie, które wierzę.
craftworkgames
@craftworkgames Thanks! Mam zamiar usunąć mój poprzedni komentarz.
Jaanus Varus
3

Wpadłem na ten sam problem co ty. Na szczęście miałem istniejący projekt XNA, który używał już pliku .spritefont i wygenerowałem plik XNB. Właśnie go skompilowałem i skopiowałem XNB do mojego projektu MonoGame i mogę go używać bez żadnych problemów.

(Zastrzeżenie: Próbowałem zbudować potok zawartości XNA dla MonoGame 3.0 beta zgodnie z instrukcjami, a po kilku godzinach poddałem się; nie uwzględniałby poprawnie projektu w Visual Studio.)

ashes999
źródło
Dzięki za wskazówkę. Dobrze wiedzieć, że możesz obejść to w ten sposób.
Khôi,
@ Khôi nie jest idealny, ale może przynajmniej cię gdzieś poprowadzić, gdy zastanawiasz się, jak zintegrować projekt potoku treści.
ashes999
2

Przynajmniej w sierpniu tego roku generowanie spritefontów nie było jeszcze wspierane przez MonoGame, jednak strumień treści był głównym przedmiotem uwagi w ostatnich miesiącach, więc nie zdziwiłbym się, gdyby działał. Oczywiście musisz znać składnię .spritefontpliku, który należy dodać do folderu zawartości. W tym celu zobacz na dole tego postu.

O ile wiem, nawet w sierpniu obsługiwane jest ładowanie już skompilowanych ikonek z plików XNB. Ponieważ nie chcesz instalować XNA do generowania tych plików XNB, możesz sprawdzić Projekt XNA Content Compiler Project na codeplex.

Oto przykładowy .spritefontplik, dzięki któremu możesz sprawdzić, czy jest on obecnie obsługiwany

<?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>
Roy T.
źródło
Na dzień dzisiejszy (25.12.2012 - wesołych świąt!), Spritefonts nie są jeszcze obsługiwane przez monogame 3.0. Właśnie wypróbowałem to zgodnie z twoimi instrukcjami.
Khôi,
Kompilator treści XNA też nie będzie dla mnie działał. Ponieważ wydaje się, że musisz mieć zainstalowany XNA, aby uruchomić kompilator treści. Kompilator treści XNA buduje fikcyjny projekt, używając XNA w tle do kompilacji plików .xnb.
Khôi,
@ Khôi Wesołych świąt też dla ciebie :). Dziwne, że projekt wymaga zainstalowanego XNA, co czyni go całkowicie bezużytecznym w większości scenariuszy!
Roy T.
To nie jest dziwne ani bezużyteczne. MonoGame potrzebuje własnego potoku treści do obsługi innych platform, takich jak Android. To jest tymczasowe xrutch - piggyback poza potokiem zawartości XNA.
ashes999
2

Możesz to teraz zrobić bez instalowania żadnych dodatkowych elementów. W nowym projekcie MonoGame powinieneś mieć Content.mgcbplik. To powinno wywołać aplikację MonoGame Pipeline. Możesz kliknąć prawym przyciskiem myszy Contentwęzeł w drzewie i dodać nowy element. Wybierz `SpriteFont Description '. To zostanie poprawnie skompilowane i powinieneś być w stanie załadować go do swojego kodu.

Jon Turner
źródło
Dziękuję Ci! Szukałem godzin, a nawet próbowałem zainstalować VS2010 i XNA na WIndows 10 (katastrofa!). Dla każdego, kto to znajdzie, następnym krokiem byłoby otwarcie pliku .spritefont (właśnie utworzonego) w edytorze tekstu i zmodyfikowanie go z domyślnej „arial” na żądaną czcionkę.
VenerableAgents
Nie rozumiem, dlaczego więcej samouczków nie daje ci tych kroków! Nie znalazłem żadnego po całym dniu patrzenia. Łatwo jest przeoczyć, że Rurociąg robi dla ciebie.
VenerableAgents
1

Najlepszą alternatywą jest wcześniejsze wygenerowanie czcionki xnb za pomocą XNA, a następnie użycie jej w projekcie Monogame dla Windows lub można wykonać starą sztuczkę polegającą na uzyskaniu okna. Uchwyt i współrzędne ekranu ScreenToClient następnie użyj GDI do narysowania tekstu z System.Drawing.dll.

bvrwoo
źródło
0

Pracuję nad tym od kilku dni, próbując to naprawić i ostatecznie mam pracę. To, nad czym pracuję, to Windows8, VS2012, MonoGame. powinienem dodać, że jest to „monoGame Windows OpenGL Pjoject”

Pozwól, że przeprowadzę cię przez kroki, które podjąłem. 1. Zainstalowałem monGame dla VS2012 2. Zainstalowałem WindowsPhone SDK8 3. Zainstalowałem XNA 4.0 dla mojego VS2010

Nie wiem, czy wszystkie te kroki są nessecery ....

Więc nie można wygenerować .spritefont w vs2012 Wygenerowałem plik spriteFont w moim vs2010, a następnie dodałem i do mojego projektu vs2012 .... ALE to nie działało. I dziś rano zobaczyłem, że adres URL tego pliku .spritefont jest nieprawidłowy. Kiedy dodałem go za pomocą eksploratora rozwiązań ... zawartość -> dodaj istniejący element ... wtedy adres URL był nieprawidłowy .. "C: \ Users \ admin \ Documents \ Visual Studio 2012 \ Projects \ MyGame \ MyGame \ Content" to jest nie gdzie vs2012, gdzie szukałem mojego pliku * .spritefot, było tutaj .. -> "C: \ Users \ admin \ Documents \ Visual Studio 2012 \ Projects \ MyGame \ MyGame \ bin \ WindowsGL \ Debug \ Content" Dodałem i manully i WOW to działało. wklejam tutaj trochę kodu, żebyś mógł lepiej zobaczyć, co zrobiłem. W mojej klasie gry umieściłem te zmienne

    SpriteFont myFont;
    int score;

w mojej metodzie loadcontent wygenerowanej automatycznie przez VS był

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

w mojej metodzie losowania wygenerowanej automatycznie przez VS było

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

a następnie ręcznie dodałem mój plik spritefont do odpowiedniego folderu

Dziwne jest to, że dodałem zdjęcia w ten sposób i znalazłem się w odpowiednim folderze, ale nie w * .spritefont, musisz ręcznie dodać go w późniejszym folderze, aby dostać się do pracy ..

Mam nadzieję, że to ma sens dla kogoś, ponieważ sprawiło mi to największy ból głowy w ostatnich dniach. Mogłem zapomnieć o kilku krokach i wszystko to może być bezużyteczne, ale mam nadzieję, że złagodzę bóle głowy u niektórych osób

Mam nadzieję, że gra monoGame zostanie zaktualizowana, aby rozwiązać te problemy ...

moofoo
źródło
0

Użyłem XNB Buildera, aby ręcznie przekonwertować je na .xnbpliki. Wystarczy uruchomić aplikację, wybrać pliki, a przekonwertuje je na pliki XNB, które są gotowe do użycia w MonoGame.

Jim Buck
źródło