如何在不使用外部库的情况下在XNA中获得精美的小文本?


13

在XNA中,spritefont技术太可怕了。Nuclex的工作做得好得多,但我不想有任何外部参考,我的游戏几乎完成了。

当使用Sansation或Quicksand等字体时,较小的字体看起来很糟糕。太糟糕了!

是否有已知的解决方法?我尝试将fontsize设置为极高,然后在spritebatch中按比例缩小它们,但是没有运气。


我使用SpriteFont为XNA创建字体,您具有很大的灵活性。我还要确保字体的位置是整数,这样就不会出现讨厌的抗锯齿现象,但这可能不是一个很好的解决方案。您也可以尝试在文本spritebatch调用中进行点过滤。
乔纳森·康奈尔

不要忘记在各种实际设备和人员上测试您的小字体。如果这是一个360度的标题,并因此定位到电视,则所有视觉元素的大小往往需要比PC屏幕大很多。
Lars Viklund'8

我正在玩PC游戏,并且字体大小设置为整数。
Mathias Lykkegaard Lorenzen 2011年

1
不要缩放文本,为所需的每种尺寸创建一个spritefont。
Wouter

1
在这里为您提供更多规则。在渲染之前将位置向量固定为整数,否则采样将使您的输出文本看起来很乱。在渲染文本之前,可能值得将纹理采样器更改为“点/最近邻”。尤其是如果您的字体是像素化的:)
Cubed2D 2011年

Answers:



13

XNA sprite字体处理器使用DXT3压缩,不能与XNA 4.0中新的预乘alpha一起很好地工作。因此,文本的块状外观。

Nuclex Sprite字体处理器输出的数据完全相同,只是Texture2D保存字体位图数据的内部没有压缩-因此没有质量问题。

由于来自Nuclex处理器的数据具有相同的格式,因此XNA SpriteFont阅读器可以读取该数据,并且您无需包括任何Nuclex库即可在游戏中分发。

(它还使您可以方便地使用与XNA的本机sprite字体定义相同的XML格式。)

话虽这么说:将外部库与游戏绑定在一起没有任何问题。并不是说它们已安装在您的系统上或任何东西上。(甚至可以合并两个程序集)。

代码也是如此(例如,如果您担心版本控制)。您只需输入Nuclex.Fonts.Content.TrueTypeImporter.dll源代码即可。实际上这没什么大不了的。


9

您可以使用像素字体

pf tempesta变种

当您使用像素字体的字体大小(或它的整数倍,例如2x,3x,4x)使用时,可以确保获得不需要像素锯齿的完美像素文本。这意味着您永远不必处理可怕的抗锯齿处理,这会使XNA的sprite字体变得很糟糕,而Nuclex变得更好。(本文研究了该问题并进行了比较)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.