Graphics.DrawString
使用将一堆(相当静态的)文本渲染到屏幕外位图,将其转换为Texture2D
一次,然后简单地调用SpriteBatch.Draw
,而不是使用内容管道和渲染文本是否有任何缺点SpriteFont
?这基本上是一页文本,绘制在“一张纸”上,但用户也可以选择调整字体大小,所以这意味着我必须包含不同大小的 spritefonts。
由于这是一个仅限 Windows 的应用程序(不打算移植它),我将可以访问所有字体,就像在普通的旧 WinForms 应用程序中一样,我相信使用Graphics.DrawString
(甚至TextRenderer
)时渲染质量会比使用 sprite 字体好得多。
此外,似乎性能可能会更好,因为SpriteBatch.DrawString
需要在每次迭代中“渲染”整个文本(即分别发送每个字母的顶点),而通过使用位图我只做一次,所以在CPU端。
- 我在这里没有看到任何问题或缺点吗?
- 是否可以使用 spritefonts 获得 alpha 混合文本?我见过周围提到的 Nuclex 框架,但它没有被移植到 Monogame AFAIK。
[更新]
从技术方面来看,它似乎工作得很好,比通过 sprite 字体更好的文本渲染。如果它们是水平渲染的,我什至会得到 ClearType。可能存在的一个问题是字体的精灵表(可能是?)在纹理内存方面比为一页文本创建单独的纹理更有效。