Xna 如何编辑已编译的spritefont?
如何编辑已编译的spritefont?我想更改一些字符的字距,擦除一两个像素,更改别名,但我找不到任何仍然受支持或广为人知的官方工具Xna 如何编辑已编译的spritefont?,xna,spritefont,Xna,Spritefont,如何编辑已编译的spritefont?我想更改一些字符的字距,擦除一两个像素,更改别名,但我找不到任何仍然受支持或广为人知的官方工具 如果无法(或太难)编辑已编译的spritefont,如何手动创建spritefont?没有正式方法。您会注意到,如果查看SpriteFont类型,您可以修改的内容很少(DefaultCharacter,间距和行间距) 如果您查看它的内容管道对应项,SpriteFontContent,则根本没有公共成员 最好的办法是使用查看这些类有哪些私有成员(以及它们如何工作)
如果无法(或太难)编辑已编译的spritefont,如何手动创建spritefont?没有正式方法。您会注意到,如果查看
SpriteFont
类型,您可以修改的内容很少(DefaultCharacter
,间距
和行间距
)
如果您查看它的内容管道对应项,SpriteFontContent
,则根本没有公共成员
最好的办法是使用查看这些类有哪些私有成员(以及它们如何工作)。然后使用反射直接修改它们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;
}
}
为了使您的生活更轻松,您可以使用它提供一个动态
,然后您可以直接访问私有成员(使编写此代码更容易)
您可以查看Nucleux TrueType导入器,它实现了自己的sprite字体处理器。它是开源的(albiet C++/CLI),所以您可以检查它的功能,或者修改它。它包括自己版本的SpriteFontContent
,但遗憾的是,它同样被锁定。Nucleux给你的最重要的东西是它有一些注释,这些注释描述了sprite字体中不同度量的含义
很明显,您正在搞乱XNA的私有部分-所以不要期望它在不同的XNA版本之间继续工作。(首先,它是私有的,这是因为XNA团队将来可以自由修改它。)
您可以做的另一件事是使用另一种工具将字体构建为“字体纹理”(尽管本文已经很老了)