【发布时间】:2020-05-16 02:57:48
【问题描述】:
我是 monogame 的新手,我正在尝试制作一个 .spritefont 文件,以便使用我选择的字体绘制字符串。
英文字符的字符串在屏幕上可以很好地显示,但我希望绘制多种语言的字符串,例如日文和中文。
所以,我尝试加载多语言字体“Microsoft JhengHei”中的所有字符。
字体的第一个字符是!(U+0021),最后一个字符是○(U+FFEE)。
但是当我尝试编译程序时,编译器给了我一个错误:
.../Content/MyFont.spritefont : 错误 : Importer 'FontDescriptionImporter' 出现意外失败!
System.Reflection.TargetInvocationException:调用的目标已抛出异常。 ---> System.ArgumentException: CharacterRegion.End 必须大于 CharacterRegion.Start
在 Microsoft.Xna.Framework.Content.Pipeline.Graphics.FontDescription.set_CharacterRegions(CharacterRegion[] value)
当我将 ○ 更改为 忮 时,MSBuild 卡住并需要很长时间才能继续内容。
下面MyFont.spritefont中的代码:
<?xml version="1.0" encoding="utf-8"?>
<XnaContent xmlns:Graphics="Microsoft.Xna.Framework.Content.Pipeline.Graphics">
<Asset Type="Graphics:FontDescription">
<FontName>Microsoft JhengHei</FontName>
<Size>14</Size>
<Spacing>0</Spacing>
<UseKerning>true</UseKerning>
<Style>Regular</Style>
<CharacterRegions>
<CharacterRegion>
<Start>!</Start>
<End>○</End>
</CharacterRegion>
</CharacterRegions>
</Asset>
</XnaContent>
我搜索了几天的解决方案,但徒劳无功,感谢任何帮助。
【问题讨论】:
-
这没有意义,因为
CharacterRegion.End和.Start都是char类型,而(char)0xFFEE大于(char)0x0021。你确定问题不简单,比如看错文件之类的吗?如果将End更改为<End>&#x0022;</End>会发生什么? -
是的,它可以编译。我在想可能
<End>&#xFFEE;</End>太大了,因为网上的文章说内容管道会将字符区域中的所有字符解析为图像文件。 -
@Groo 但是错误信息让我很困惑,我不知道该怎么办。
-
我尝试使用这个 spritefont 文件,它没有抛出错误,但 msbuild 仍在构建内容。我认为生成的纹理太大而无法正常工作。你看到这篇文章了吗:Common Kanji char. ranges for XNA?您还可以查看 XNA 4 Localization sample project,它实现了一个自定义导入器,它只添加在 .resx 文件中找到的字符范围。
-
@Groo 非常感谢。我找到了这个link,它成功了。
标签: c# fonts xna monogame spritefont