วิธีสร้าง Spritefonts สำหรับ monogame


14

ฉันแค่ต้องการแสดงข้อความบนหน้าจอโดยใช้:

  • monogame 3.0
  • MS Visual Studio 2010 C # Express

ใน XNA คุณสามารถเพิ่มแบบอักษรให้กับไปป์ไลน์เนื้อหาได้ค่อนข้างง่าย แต่ดูเหมือนจะไม่เป็นเช่นนั้นใน monogame กำลังโหลดไฟล์ 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's เข้ากับ MonoGame.Extended library dylanwilson.net/bmfont-rendering-with-monogame-extended
craftworkgames

@ J2V ฉันอัปเดตคำตอบให้ชี้ไปที่ลิงก์ที่ใช้งานได้ มันไม่เหมือนกับของเก่า แต่ก็ยังคงตอบคำถามที่ฉันเชื่อ
craftworkgames

@craftworkgames ขอบคุณ! ฉันจะลบความคิดเห็นก่อนหน้าของฉัน
Jaanus Varus

3

ฉันพบปัญหาเดียวกันกับคุณ โชคดีที่ฉันมีโครงการ XNA ที่มีอยู่แล้วซึ่งใช้ไฟล์. spritefont แล้วและสร้างไฟล์ XNB ฉันเพิ่งรวบรวมและคัดลอก XNB ไปยังโครงการ MonoGame ของฉันและฉันสามารถใช้งานได้โดยไม่มีปัญหา

(ข้อจำกัดความรับผิดชอบ: ฉันพยายามสร้าง XNA content ไปป์ไลน์สำหรับ MonoGame 3.0 beta ตามคำแนะนำและหลังจากนั้นสองสามชั่วโมงฉันก็ยอมแพ้มันจะไม่รวมโครงการอย่างถูกต้องใน Visual Studio)


ขอบคุณสำหรับเคล็ดลับ ดีใจที่ได้ทราบว่าคุณสามารถหลีกเลี่ยงปัญหานี้ได้
Khôi

@ Khôiมันไม่สมบูรณ์แบบ แต่อย่างน้อยก็สามารถพาคุณไปที่ไหนสักแห่งในขณะที่คุณหาวิธีที่จะรวมโครงการท่อส่งเนื้อหา
ashes999

2

อย่างน้อยในเดือนสิงหาคมปีนี้การสร้าง spritefonts ยังไม่ได้รับการสนับสนุนจาก MonoGame แต่ไปป์ไลน์เนื้อหาเป็นจุดสนใจหลักของความสนใจในช่วงสองสามเดือนที่ผ่านมาดังนั้นฉันจะไม่แปลกใจถ้ามันทำงานได้ในขณะนี้ แน่นอนคุณต้องรู้ไวยากรณ์ของ.spritefontไฟล์ที่จะต้องเพิ่มลงในโฟลเดอร์เนื้อหาของคุณ สำหรับที่เห็นด้านล่างของโพสต์นี้

เท่าที่ฉันสามารถบอกได้ถึงแม้จะย้อนกลับไปจนถึงเดือนสิงหาคมก็สนับสนุนการโหลด spritefonts ที่คอมไพล์แล้วจากไฟล์ XNB เนื่องจากคุณไม่ต้องการติดตั้ง XNA เพื่อสร้างไฟล์ XNB เหล่านี้คุณอาจต้องการตรวจสอบXNA Content Compiler Projectบน 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 ยังไม่รองรับ spritefonts ฉันแค่ลองทำตามคำแนะนำของคุณ
Khôi

ตัวรวบรวมเนื้อหา XNA จะไม่ทำงานสำหรับฉันเช่นกัน ดูเหมือนว่าคุณจะต้องติดตั้ง XNA เพื่อที่จะเรียกใช้ตัวรวบรวมเนื้อหา XNA Content Compiler สร้างโครงการจำลองโดยใช้ XNA ในพื้นหลังเพื่อรวบรวมไฟล์. xnb
Khôi

@ Khôi Merry Christmas กับคุณด้วย :) แปลกที่โครงการต้องการติดตั้ง XNA ทำให้ไร้ประโยชน์สำหรับสถานการณ์ส่วนใหญ่!
รอยต.

มันไม่แปลกหรือไร้ประโยชน์ MonoGame ต้องการไปป์ไลน์เนื้อหาของตัวเองเพื่อสนับสนุนแพลตฟอร์มอื่น ๆ เช่น Android นี่คือ xrutch ชั่วคราว - ย้อนหลังไปป์ไลน์เนื้อหา XNA
ashes999

2

ตอนนี้คุณสามารถทำได้โดยไม่ต้องติดตั้งอะไรเพิ่มเติม ในโครงการ MonoGame ใหม่ล่าสุดคุณควรมีContent.mgcbไฟล์ ที่ควรเปิดแอพ MonoGame ขึ้นมา คุณสามารถคลิกขวาที่Contentโหนดในแผนผังและเพิ่มรายการใหม่ เลือก 'คำอธิบาย SpriteFont' ที่จะรวบรวมได้อย่างถูกต้องและคุณควรจะสามารถโหลดได้ในรหัสของคุณ


ขอขอบคุณ! ฉันค้นหามาหลายชั่วโมงแล้วและลองติดตั้ง VS2010 & XNA บน WIndows 10 (หายนะ!) สำหรับใครก็ตามที่พบสิ่งนี้ขั้นตอนต่อไปคือการเปิดไฟล์. spritefont (คุณเพิ่งสร้างขึ้น) ในโปรแกรมแก้ไขข้อความและปรับเปลี่ยนจากค่าเริ่มต้น 'arial' เป็นแบบอักษรที่คุณต้องการ
VenerableAgents

ฉันไม่เข้าใจว่าทำไมบทเรียนเพิ่มเติมไม่ให้คุณทำตามขั้นตอนเหล่านี้! ฉันไม่พบสิ่งใดหลังจากดูทั้งวัน มันเป็นเรื่องง่ายที่จะมองข้ามว่า Pipeline ทำเพื่อคุณ
VenerableAgents

1

ลองดูสิฉันได้รวบรวมไฟล์ * .spritefont ของฉันไปที่. xnb เพื่อใช้ใน MonoGame สำหรับฉันมันเป็นวิธีเดียวที่ใช้งานได้

ลองดูสิอาจช่วยคุณได้เช่นกัน http://xnacontentcompiler.codeplex.com/


1

ทางเลือกที่ดีที่สุดคือการสร้างตัวอักษร xnb ล่วงหน้าผ่าน XNA ก่อนจากนั้นใช้มันในโครงการ Monogame for Windows ของคุณหรือคุณสามารถทำเคล็ดลับเก่าแก่ในการรับ Window.Handle และพิกัดหน้าจอ ScreenToClient จากนั้นใช้ GDI เพื่อวาดข้อความของคุณ ด้วย System.Drawing.dll


0

ฉันทำงานนี้มาหลายวันแล้วพยายามแก้ไขและในที่สุดฉันก็สามารถทำงานได้ สิ่งที่ฉันกำลังทำงานคือ Windows8, VS2012, MonoGame ฉันควรเพิ่มว่านี่เป็น "monoGame Windows OpenGL Pjoject"

ฉันขอพาคุณไปตามขั้นตอนที่ฉันได้ทำไป 1. ฉันติดตั้ง monGame สำหรับ VS2012 2. ฉันติดตั้ง WindowsPhone SDK8 3. ฉันติดตั้ง XNA 4.0 สำหรับ VS2010 ของฉัน

ฉันไม่รู้ว่าทุกขั้นตอนเหล่านี้เป็นสิ่งที่ทำให้เป็นใจ ....

เนื่องจากคุณไม่สามารถสร้าง. spritefont ใน vs2012 ฉันสร้างไฟล์ spriteFont ใน vs2010 ของฉันแล้วเพิ่ม i ให้กับโปรเจ็กต์ vs2012 ของฉัน .... แต่มันไม่ทำงาน และเมื่อเช้านี้ฉันเห็นว่า URL ของไฟล์. spritefont นั้นผิด เมื่อฉันเพิ่มเข้าไปในโซลูชัน explorer .. เนื้อหา -> เพิ่มรายการที่มีอยู่ ... จากนั้น 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;

ในวิธีการโหลดเนื้อหาของฉันสร้างอัตโนมัติโดย VS คือ

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

ในวิธีการวาดของฉันสร้างอัตโนมัติโดย VS คือ

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

จากนั้น manully เพิ่มไฟล์ spritefont ของฉันลงในโฟลเดอร์ด้านขวา

สิ่งที่แปลกคือฉันได้เพิ่มรูปภาพด้วยวิธีนี้และสิ่งที่ลงเอยในโฟลเดอร์ด้านขวา แต่ไม่ใช่ * .spritefont คุณจะต้องเพิ่มมันเข้าไปในโฟลเดอร์ภายหลังเพื่อให้ฉันทำงาน ..

ฉันหวังว่าบางสิ่งนี้สมเหตุสมผลสำหรับใครบางคนเพราะสิ่งนี้ทำให้ฉันปวดหัวที่สุดในวันนี้ ฉันอาจลืมขั้นตอนบางอย่างและทั้งหมดนี้อาจไร้ประโยชน์ แต่ฉันหวังว่าฉันจะบรรเทาอาการปวดหัวสำหรับบางคนที่นั่น

และฉันหวังว่า monoGame จะได้รับการอัปเดตเพื่อแก้ไขปัญหาเหล่านี้ ...


0

ฉันเคยใช้ XNB Builderเพื่อแปลงเป็น.xnbไฟล์ด้วยตนเอง เพียงแค่เรียกใช้แอพเลือกไฟล์ของคุณและมันจะแปลงเป็นไฟล์ XNB ที่พร้อมใช้งานกับ MonoGame

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.