如何編輯編譯的spritefont?我想改變一些字符的字距,擦除一個或兩個字符,改變別名,但是我找不到任何仍然支持或廣爲人知的官方工具。如何編輯已編譯的spritefont?
如果沒有辦法(或者如果太難了)編輯編譯的spritefont,我該如何手動創建spritefont?
如何編輯編譯的spritefont?我想改變一些字符的字距,擦除一個或兩個字符,改變別名,但是我找不到任何仍然支持或廣爲人知的官方工具。如何編輯已編譯的spritefont?
如果沒有辦法(或者如果太難了)編輯編譯的spritefont,我該如何手動創建spritefont?
有沒有官方的方式來做到這一點。您會注意到,如果您查看SpriteFont
類型,您可以修改幾個寶貝(DefaultCharacter
,Spacing
和LineSpacing
)。
如果你看看它的內容管道對應,SpriteFontContent
,根本沒有public
成員。
最好的辦法是用ILSpy看到這些類有什麼私有成員(以及它們是如何工作)。然後使用反射直接修改它們。 SpriteFont
基本上是一組度量數據和一個Texture2D
。
我建議你在構建內容流水線擴展時修改SpriteFontContent
(如果你有自己沒有構建的XNB文件,這會變得更復雜)。它會是這個樣子:
[ContentProcessor(DisplayName = "Custom Font Processor")]
public class CustomFontProcessor : FontDescriptionProcessor
{
public override SpriteFontContent Process(FontDescription input, ContentProcessorContext context)
{
SpriteFontContent output = base.Process(input, context);
// ... your modifications here ...
return output;
}
}
爲了使您的生活更輕鬆,你可以使用Exposed Object它給你dynamic
,然後可以訪問私有成員直接(使它更容易寫這反映代碼)。
你可以看看Nuclex TrueType導入器,它實現了它自己的精靈字體處理器。它是開放源代碼(albiet C++/CLI),因此您可以檢查它的功能並修改它。它包括它自己的版本SpriteFontContent
,但不幸的是它同樣被鎖定。 Nuclex最重要的事情就是它具有描述精靈字體中不同度量標準的意義。
很明顯,你正在搞亂XNA的私有部分 - 所以不要指望它在不同的XNA版本之間繼續工作。 (它之所以是擺在首位的所有私人是爲了讓XNA團隊可以隨意修改它的未來。)
你可以做的另一件事是使用替代工具來構建你的字體作爲「字體紋理」(described here - 雖然這篇文章很舊)。