gpt4 book ai didi

xna - 如何编辑已编译的 Sprite 字体?

转载 作者:行者123 更新时间:2023-12-04 16:42:01 27 4
gpt4 key购买 nike

如何编辑已编译的 spritefont?我想更改某些字符的字距调整、删除一两个像素、更改别名,但找不到任何仍受支持或广为人知的官方工具。

如果无法(或者太难)编辑已编译的 spritefont,我该如何手动创建 spritefont?

最佳答案

没有正式的方法可以做到这一点。您会注意到,如果您查看 SpriteFont 类型,您几乎可以修改(DefaultCharacterSpacingLineSpacing).

如果您查看它的内容管道对应物 SpriteFontContent,根本没有 public 成员。


你最好的选择是使用 ILSpy查看这些类有哪些私有(private)成员(以及它们如何工作)。然后直接使用反射修改它们。 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,然后您可以直接访问私有(private)成员(使编写此反射(reflect)代码更容易)。

您可以查看 Nuclex TrueType Importer,它实现了自己的 sprite 字体处理器。它是开源的(albiet C++/CLI),因此您可以检查它的作用并可能对其进行修改。它包括它自己的 SpriteFontContent 版本,但遗憾的是它同样被锁定了。 Nuclex 会给你的最重要的事情是它有注释,描述了 sprite 字体中不同指标的含义。

很明显,您弄乱了 XNA 的私有(private)部分 - 所以不要期望它在不同的 XNA 版本之间继续工作。 (首先它全部是私有(private)的原因是 XNA 团队将来可以自由修改它。)


您可以做的另一件事是使用替代工具将您的字体构建为“字体纹理”(described here - 虽然这篇文章很旧)。

关于xna - 如何编辑已编译的 Sprite 字体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12385675/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com