我刚安装了适用于Windows Phone的Windows 8和Visual Studio Express 2012 ...但是我无法再编译包含Segoe WP类型的spritefonts的XNA项目(相同的项目使用Visual Studio成功编译) Express 2010 for Windows Phone):
<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>Segoe WP</FontName>
<!--
Size is a float value, measured in points. Modify this value to change
the size of the font.
-->
<Size>14</Size>
...
</XnaContent>
上面的代码段始终会生成以下构建错误:
Error 1 Building content threw NotSupportedException: Specified method is not supported.
at Microsoft.Xna.Framework.Content.Pipeline.Interop.KerningHelper.GetCharacterSpacing(Char c)
at Microsoft.Xna.Framework.Content.Pipeline.Processors.FontDescriptionProcessor.Process(FontDescription input, ContentProcessorContext context)
at Microsoft.Xna.Framework.Content.Pipeline.ContentProcessor'2.Microsoft.Xna.Framework.Content.Pipeline.IContentProcessor.Process(Object input, ContentProcessorContext context)
at Microsoft.Xna.Framework.Content.Pipeline.BuildCoordinator.BuildAssetWorker(BuildItem item)
at Microsoft.Xna.Framework.Content.Pipeline.BuildCoordinator.BuildAsset(BuildItem item)
at Microsoft.Xna.Framework.Content.Pipeline.BuildCoordinator.RunTheBuild()
at Microsoft.Xna.Framework.Content.Pipeline.Tasks.BuildContent.RemoteProxy.RunTheBuild(BuildCoordinatorSettings settings, TimestampCache timestampCache, ITaskItem[] sourceAssets, String[]& outputContent, String[]& rebuiltContent, String[]& intermediates, Dictionary'2& dependencyTimestamps, KeyValuePair'2[]& warnings)
如果我用<FontName>Segoe WP</FontName>
替换<FontName>Segoe UI Mono</FontName>
,则编译成功。
有没有人经历过类似的事情?有解决方法/解决方法吗?任何帮助都会非常感激。
答案 0 :(得分:0)
此错误来自内容处理器。出于某种原因,内部GetCharacterSpacing
方法不支持该字体,该方法用于确定字符的宽度。
(粗略猜测原因:2012年的构建过程可能正在使用较新版本的.NET框架 - 例如:4.5 vs 4.0 - 并且由于某些疯狂的原因,该特定方法在版本之间的工作方式不同。你可能会对MSBuild感到困惑 - 但这太费劲了。)
如果它在2010年有效,您可以直接使用在该IDE中完成的构建中生成的xnb
文件。
更好的选择可能是使用Nuclex.Fonts。这使用FreeType来呈现字体 - 因此它根本不需要Windows API。它也比XNA的内置处理器提供更好的结果(主要是因为它没有有损压缩其输出)。它是一个替代品 - 它读取相同的XML文件并输出相同的SpriteFont
个对象。