Cách tạo Spritefonts cho monogame


14

Tôi chỉ muốn hiển thị một số văn bản ra màn hình bằng cách sử dụng:

  • monogame 3.0
  • MS Visual Studio 2010 C # Express

Trong XNA, bạn có thể thêm phông chữ vào đường dẫn nội dung khá dễ dàng. Nhưng điều này dường như không phải là trường hợp trong monogame. Tải tập tin TTF bằng cách sử dụng Content<SpriteFont>.Load()không hoạt động. Có cách nào để tạo hoặc tải xuống các tệp * .spritefont hoặc * .xnb chứa dữ liệu phông chữ (mà không cần dùng đến cài đặt XNA) không?


Tôi cũng đã có rất nhiều vấn đề để tìm ra điều này, hướng dẫn này đã giúp tôi rất nhiều. youtube.com/watch?v=BwtQn02oy6A

Câu trả lời:


5

Một cách khác là sử dụng phông chữ bitmap được tạo trước thay thế. Đây là một hướng dẫn tôi đã viết một thời gian trước khi sử dụng công cụ BMFont để đưa văn bản vào trò chơi của bạn bằng thư viện MonoGame.Extends .

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


Mặc dù tôi không hài lòng 100% với giải pháp này, tôi đoán bây giờ tôi sẽ sử dụng phông chữ bitmap và hy vọng điều tốt nhất trong tương lai gần.
Khôi

Gần đây tôi đã thêm BitmapFont vào thư viện MonoGame.Extends dylanwilson.net/bmfont-rendering-with-monogame-extends
craftworkgames

@ J2V Tôi đã cập nhật câu trả lời để chỉ ra một liên kết làm việc. Nó không hoàn toàn giống như cái cũ nhưng nó vẫn trả lời câu hỏi tôi tin.
craftworkgames

@craftworkgames Cảm ơn! Tôi sẽ xóa bình luận trước đây của tôi.
Jaanus Varus

3

Tôi gặp vấn đề tương tự như bạn. Rất may, tôi đã có một dự án XNA hiện có đã sử dụng tệp .spritefont và tạo tệp XNB. Tôi vừa biên dịch nó, và sao chép XNB vào dự án MonoGame của tôi và tôi có thể sử dụng nó mà không gặp vấn đề gì.

(Tuyên bố miễn trừ trách nhiệm: Tôi đã thử xây dựng đường dẫn nội dung XNA cho MonoGame 3.0 beta theo hướng dẫn và sau vài giờ, tôi đã từ bỏ; nó sẽ không bao gồm dự án đúng cách trong Visual Studio.)


Cảm ơn vì tiền boa. Thật tốt khi biết rằng bạn có thể làm việc xung quanh nó như thế này.
Khôi

@ Khôi nó không hoàn hảo, nhưng ít nhất nó có thể đưa bạn đến một nơi nào đó trong khi bạn tìm ra cách tích hợp dự án đường ống nội dung.
tro999

2

Ít nhất là vào tháng 8 năm nay, việc tạo spritefont vẫn chưa được MonoGame hỗ trợ, tuy nhiên đường truyền nội dung là trọng tâm chính của sự chú ý trong vài tháng qua vì vậy tôi sẽ không ngạc nhiên nếu hiện tại nó không hoạt động. Tất nhiên bạn cần biết cú pháp của một .spritefonttập tin cần được thêm vào thư mục nội dung của bạn. Cho rằng xem dưới cùng của bài này.

Theo như tôi có thể nói, kể từ tận tháng 8, việc tải các spritefont đã được biên dịch từ các tệp XNB được hỗ trợ. Vì bạn không muốn cài đặt XNA để tạo các tệp XNB này, bạn có thể muốn kiểm tra Dự án Trình biên dịch nội dung XNA trên codeplex.

Dưới đây là một .spritefonttệp ví dụ để bạn có thể xem nếu nó hiện được hỗ trợ

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

Tính đến thời điểm hiện tại (25.12.2012 - merry xmas!), Spritefonts chưa được hỗ trợ bởi monogame 3.0. Tôi chỉ thử nó theo hướng dẫn của bạn.
Khôi

Trình biên dịch nội dung XNA sẽ không chạy cho tôi. Vì có vẻ như bạn cần cài đặt XNA để chạy trình biên dịch nội dung. Trình biên dịch nội dung XNA xây dựng một dự án giả bằng cách sử dụng XNA trong nền để biên dịch các tệp .xnb.
Khôi

@ Khôi Giáng sinh vui vẻ cho bạn quá :). Điều kỳ lạ là dự án yêu cầu cài đặt XNA, làm cho nó khá vô dụng đối với hầu hết các kịch bản!
Roy T.

Nó không lạ, cũng không vô dụng. MonoGame cần đường ống nội dung riêng để hỗ trợ các nền tảng khác, như Android. Đây là một xrutch tạm thời - cõng ra khỏi đường ống nội dung XNA.
tro999

2

Bây giờ bạn có thể làm điều này mà không cần cài đặt thêm bất cứ điều gì. Trong một dự án MonoGame hoàn toàn mới, bạn nên có một Content.mgcbtệp. Điều đó sẽ mang đến ứng dụng MonoGame Pipeline. Bạn có thể nhấp chuột phải vào Contentnút trong cây và thêm một mục mới. Chọn 'Mô tả SpriteFont'. Điều đó sẽ được biên dịch chính xác và bạn sẽ có thể tải nó trong mã của mình.


Cảm ơn bạn! Tôi đã tìm kiếm hàng giờ và thậm chí đã thử cài đặt VS2010 & XNA trên WIndows 10 (thảm họa!). Đối với bất kỳ ai khác tìm thấy điều này, bước tiếp theo sẽ là mở tệp .spritefont (bạn vừa tạo) trong trình chỉnh sửa văn bản và sửa đổi nó từ 'arial' mặc định thành phông chữ bạn muốn.
Hòa thượng

Tôi không hiểu tại sao nhiều hướng dẫn không cung cấp cho bạn các bước này! Tôi đã không tìm thấy bất kỳ sau khi tìm kiếm cả ngày. Thật là một điều dễ dàng để bỏ qua rằng Đường ống dành cho bạn.
Hòa thượng

1

Hãy xem người này, tôi đã biên dịch các tệp * .spritefont của mình thành .xnb để sử dụng trong MonoGame, đối với tôi, đó là cách duy nhất để nó hoạt động.

Kiểm tra nó, có thể giúp bạn quá. http://xnacontentcompiler.codeplex.com/


1

Cách thay thế tốt nhất là tạo trước phông chữ xnb qua XNA sau đó chỉ cần sử dụng chúng trong dự án Monogame cho Windows của bạn hoặc bạn có thể thực hiện thủ thuật cũ để lấy Window.Handle và tọa độ màn hình ScreenToClient sau đó sử dụng GDI để vẽ văn bản của bạn với System.Drawing.dll.


0

Tôi đã làm việc về điều này trong vài ngày nay, cố gắng khắc phục điều này và cuối cùng tôi đã làm việc được. Những gì tôi đang làm việc là Windows8, VS2012, MonoGame. tôi nên thêm rằng đây là "monoGame Windows OpenGL Pjoject"

Hãy để tôi đưa bạn qua các bước tôi đã thực hiện. 1. Tôi đã cài đặt monGame cho VS2012 2. Tôi đã cài đặt WindowsPhone SDK8 3. Tôi đã cài đặt XNA 4.0 cho VS2010 của mình

Tôi không biết nếu tất cả các bước này là không cần thiết ....

Vì bạn không thể tạo .spritefont trong vs2012 Tôi đã tạo một tệp spriteFont trong vs2010 của tôi và sau đó thêm i vào dự án vs2012 của tôi .... NHƯNG nó không hoạt động. Và sáng nay tôi thấy rằng URL cho tệp .spritefont đó là sai. Khi tôi thêm nó thông qua giải pháp explorer..content -> thêm mục hiện có ... thì url bị sai .. "C: \ Users \ admin \ Documents \ Visual Studio 2012 \ Project \ MyGame \ MyGame \ Content" đây là không phải là nơi vs2012 nơi tìm kiếm tệp * .spritefot của tôi, nó đã ở đây ..--> "C: \ Users \ admin \ Documents \ Visual Studio 2012 \ Project \ MyGame \ MyGame \ bin \ WindowsGL \ Debug \ Content" Tôi đã thêm tôi manully, và WOW nó làm việc Tôi dán một số mã ở đây để bạn có thể thấy những gì tôi đã làm .. bên trong lớp trò chơi của tôi, tôi đặt các biến này

    SpriteFont myFont;
    int score;

trong phương thức loadcontent của tôi được tự động tạo bởi VS là

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

trong phương thức vẽ của tôi được tự động tạo bởi VS là

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

và sau đó thêm vào tệp spritefont của tôi trong thư mục bên phải

Điều kỳ lạ là tôi đã thêm hình ảnh theo cách này và cuối cùng đã vào đúng thư mục nhưng không phải là * .spritefont, bạn phải thêm nó vào thư mục sau để tôi làm việc ..

Tôi hy vọng một số điều này có ý nghĩa với ai đó bởi vì điều này đã khiến tôi đau đầu nhất trong những ngày qua. Tôi có thể đã quên một số bước và tất cả điều này có thể là vô ích, nhưng tôi hy vọng rằng tôi có thể giảm bớt đau đầu cho một số ngoài kia

Và tôi hy vọng rằng monoGame sẽ được cập nhật để khắc phục những sự cố này ...


0

Tôi đã sử dụng XNB Builder để tự chuyển đổi chúng thành .xnbcác tệp. Chỉ cần chạy ứng dụng, chọn các tệp của bạn và nó sẽ chuyển đổi chúng thành các tệp XNB đã sẵn sàng để sử dụng với MonoGame.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.